2016-11-27 2 views
0

getメソッドを使用して無限の読み取りスクラップを実現することは可能ですか?例えば、 requests.getメソッドpythonを使用した無限スクロール

http://www.justdial.com/Ahmedabad/Bearing-Dealers/ct-302676 

たちはスクロールダウン各ページの次のリンクを与える

http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Ahmedabad&search=Bearing+Dealers&where=&catid=302676&psearch=&prid=&page=2&SID=&mntypgrp=0&toknbkt=&bookDate=&jdsrc= 

http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Ahmedabad&search=Bearing+Dealers&where=&catid=302676&psearch=&prid=&page=3&SID=&mntypgrp=0&toknbkt=&bookDate=&jdsrc= 

は、これまでの私のコードは次のようになります。すべての変更を提案してくださいまた、

import requests 

def readJustDial(c): 
    hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
      'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
      'Accept-Encoding': 'none', 
      'Accept-Language': 'en-US,en;q=0.8', 
      'Connection': 'keep-alive'}  
    for i in range(1,10): 
     url = 'http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city='+str(c)+'&search=Bearing+Dealers&where=&catid=302676&psearch=&prid=&page='+str(i)+'&SID=&mntypgrp=0&toknbkt=&bookDate=&jdsrc=' 
     page = requests.get(url,hdr) 

def main(): #this is main function of this program 
    allCities=["Ahmedabad","Hyderabad","Bangalore","Kolkata","Chennai","Mumbai","Delhi-NCR","Pune"] 
    for city in allCities: 
     readJustDial(city) 
     #print(city) 

if __name__ == "__main__": 
    main()  

私が作ることができます私の既存のコードに。私はPythonを学んでいるので、どんな提案も良いでしょう。

+0

私にはうまく見えます。あなたのコードはあなたのニーズをどのように満たしていませんか? – Ouroborus

+0

@Ouroborusaccessが拒否されました...もしあなたがそのページ(2ページ目または3ページ目)を開こうとすると、ブラウザで実際に開くことはできません。空リストを表示します。 –

+0

リファラーとクッキーが必要です。 – Ouroborus

答えて

1

正常に動作するブラウザのxhr要求に付属するヘッダーを真似しようとします。ブラウザのデベロッパーツール(私はクロムを使用しています)を使用して、これらのヘッダーを表示できます。 私は要求を見てみると、私はそれはこれらのヘッダを送信することを参照してください。

Accept:application/json, text/javascript, */*; q=0.01 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4 
Connection:keep-alive 
Cookie:f5avrbbbbbbbbbbbbbbbb=BEKIPCFANCEHKADKNPJJJLHGCDKJOEEGKIIEPAAPHGEDJDNKFFBPCKEGMMIAECHOLECIMLJDAICKIFECEPMNKJNMKIDIMHPCOMHNNHMANENHHKEGMABPKFGKBAPGCHCJ; ppc=; PHPSESSID=bh34mlv2ba4gmgbntjtsjtt753; www=1712105664.20480.0000; _gat=1; scity=Ahmedabad; sarea=; dealBackCity=Ahmedabad; inweb_city=Ahmedabad; profbd=0; bdcheck=1; _ga=GA1.2.338746795.1480258713; tab=toprs; BDprofile=1; prevcatid=302676; view=lst_v; main_city=Ahmedabad 
Host:www.justdial.com 
Referer:http://www.justdial.com/Ahmedabad/Bearing-Dealers/ct-302676 
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 
X-Requested-With:XMLHttpRequest 

は、クッキー(通常、彼らは単に一時的に働く)を除いて、これらのヘッダで要求を送信してみてください。

これでも動作しない場合は、Cookieが必要です。ブラウザ(セレンなどを使用)を使用するか、ウェブページまたはクッキーのリバースエンジニアリングを行い、動作中のクッキーを取得する方法を記述してください。

関連する問題