Kopiere data fra en dynamisk nettside ved hjelp scrapy

stemmer
1

Jeg begynte å skrive en skrape for området for å samle inn data på biler. Som det viste seg, kan datastrukturen endres, fordi selgerne ikke fyller alle feltene, på grunn av hva det er felt som kan endres, og i løpet av skrapen som et resultat i CSV-filen, verdiene er i forskjellige Enger.

side eksempel:

https://www.olx.ua/obyavlenie/prodam-voikswagen-touran-2011-goda-IDBzxYq.html#87fcf09cbd

https://www.olx.ua/obyavlenie/fiat-500-1-4-IDBjdOc.html#87fcf09cbd

data eksempel: data f.eks

En tilnærming var å sjekke feltnavn med text () = Category name, men jeg er ikke sikker på hvordan du skal skrive resultatet til de riktige cellene.

Også bruker jeg den innebygde Google utvikler verktøy, og med hjelp av kommandoen document.getElementsByClassName('margintop5')[0].innerText jeg tok ut hele innholdet i tabellen, men resultatene er ikke strukturert.

Så hvis produksjonen kan være i JSON-format , så det ville løse mitt problem?

innertext resultat

I tillegg, når jeg studerte siden koden, kom jeg over en javascript script der alle de nødvendige data som allerede er strukturert, men jeg vet ikke hvordan du skal få dem.

                 <script type=text/javascript>
                var GPT = GPT || {};
                GPT.targeting = {cat_l0:transport,cat_l1:legkovye-avtomobili,cat_l2:volkswagen,cat_l0_id:1532,cat_l1_id:108,cat_l2_id:1109,ad_title:volkswagen-jetta,ad_img:https:\/\/img01-olxua.akamaized.net\/img-olxua\/676103437_1_644x461_volkswagen-jetta-kiev.jpg,offer_seek:offer,private_business:private,region:ko,subregion:kiev,city:kiev,model:[jetta],modification:[],motor_year:[2006],car_body:[sedan],color:[6],fuel_type:[543],motor_engine_size:[1751-2000],transmission_type:[546],motor_mileage:[175001-200000],condition:[first-owner],car_option:[air_con,climate-control,cruise-control,electric_windows,heated-seats,leather-interior,light-sensor,luke,on-board-computer,park_assist,power-steering,rain-sensor],multimedia:[acoustics,aux,cd],safety:[abs,airbag,central-locking,esp,immobilizer,servorul],other:[glass-tinting],cleared_customs:[no],price:[3001-5000],ad_price:4500,currency:USD,safedealads:,premium_ad:0,imported:0,importer_code:,ad_type_view:normal,dfp_user_id:e3db0bed-c3c9-98e5-2476-1492de8f5969-ver2,segment:[],dfp_segment_test:76,dfp_segment_test_v2:46,dfp_segment_test_v3:46,dfp_segment_test_v4:32,adx:[bda2p24,bda1p24,bdl2p24,bdl1p24],comp:[o12],lister_lifecycle:0,last_pv_imps:2,user-ad-fq:2,ses_pv_seq:1,user-ad-dens:2,listingview_test:1,env:production,url_action:ad,lang:ru,con_inf:transportxxlegkovye-avtomobilixx46};

Dataene i json dict

Hvordan kan jeg få data fra sidene ved hjelp av python og scrapy?

Publisert på 19/09/2018 klokken 13:23
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Du kan gjøre det ved å trekke ut JS koden fra <script>blokken, ved hjelp av en regex å få bare JS objekt med data og deretter legge det ved hjelp av jsonmodulen:

query = 'script:contains("GPT.targeting = ")::text'
js_code = response.css(query).re_first('targeting = ({.*});')
data = json.loads(js_code)

På denne måten dataer en python dict inneholder dataene fra JS objektet.

Mer om re_firstmetoden her: https://doc.scrapy.org/en/latest/topics/selectors.html#using-selectors-with-regular-expressions

Svarte 19/09/2018 kl. 14:26
kilden bruker

stemmer
0

Jeg vil si at du må:

1) Konverter under C # klassen til en python klasse. (Jeg laget det ved hjelp av dette innlegget: https://stackoverflow.com/a/48023576/4180382 )

2) gjøre en webcall fra Python til Javascript-filen ekstrahere .json strengen ved hjelp regex (teksten bak 'GPT.targeting')

3) Konverter JSON strengen til den nyopprettede Python klasse.

    public class Rootobject
{
    public string cat_l0 { get; set; }
    public string cat_l1 { get; set; }
    public string cat_l2 { get; set; }
    public string cat_l0_id { get; set; }
    public string cat_l1_id { get; set; }
    public string cat_l2_id { get; set; }
    public string ad_title { get; set; }
    public string ad_img { get; set; }
    public string offer_seek { get; set; }
    public string private_business { get; set; }
    public string region { get; set; }
    public string subregion { get; set; }
    public string city { get; set; }
    public string[] model { get; set; }
    public object[] modification { get; set; }
    public int[] motor_year { get; set; }
    public string[] car_body { get; set; }
    public string[] color { get; set; }
    public string[] fuel_type { get; set; }
    public string[] motor_engine_size { get; set; }
    public string[] transmission_type { get; set; }
    public string[] motor_mileage { get; set; }
    public string[] condition { get; set; }
    public string[] car_option { get; set; }
    public string[] multimedia { get; set; }
    public string[] safety { get; set; }
    public string[] other { get; set; }
    public string[] cleared_customs { get; set; }
    public string[] price { get; set; }
    public string ad_price { get; set; }
    public string currency { get; set; }
    public string safedealads { get; set; }
    public string premium_ad { get; set; }
    public string imported { get; set; }
    public string importer_code { get; set; }
    public string ad_type_view { get; set; }
    public string dfp_user_id { get; set; }
    public object[] segment { get; set; }
    public string dfp_segment_test { get; set; }
    public string dfp_segment_test_v2 { get; set; }
    public string dfp_segment_test_v3 { get; set; }
    public string dfp_segment_test_v4 { get; set; }
    public string[] adx { get; set; }
    public string[] comp { get; set; }
    public string lister_lifecycle { get; set; }
    public string last_pv_imps { get; set; }
    public string useradfq { get; set; }
    public string ses_pv_seq { get; set; }
    public string useraddens { get; set; }
    public string listingview_test { get; set; }
    public string env { get; set; }
    public string url_action { get; set; }
    public string lang { get; set; }
    public string con_inf { get; set; }
}
Svarte 19/09/2018 kl. 13:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more