urlopen / requests.get没有获取所有页面内容

时间:2017-05-19 20:20:23

标签: javascript python beautifulsoup

使用Python,我试图抓住一个房地产网站获取有关公寓的信息。我需要的所有信息都是存储在页面头部的一个javascript变量(ava_data)。

我在cloud9(在线IDE)工作,我宁愿不切换它。 我用美丽的汤来刮。

from bs4 import BeautifulSoup
import os
import requests

url = 'http://www.seloger.com/list.htm?idtt=1&idtypebien=1,2&ci=750120,750114&tri=initial&naturebien=1&nb_pieces=2&pxmax=1250&surfacemin=40'
seloger_html = requests.get(url)
soup = BeautifulSoup(seloger_html.text,'html.parser')
path = os.getcwd() + '/COMPLET/scrap_seloger.txt'
f = open(path, 'w')
f.write(soup.prettify().encode('utf8'))

我无法始终从汤中获取所有信息。为了验证这一点,我在txt文件中写了美化汤 当它工作时,我得到以下文件(与Chrome中的Inspection相同):https://ufile.io/eue0b
如果没有,我会收到以下信息:https://ufile.io/f1dnx

我已经设法从几十次试验中获得正确的文件4-5次。从我所知道的,我第一次尝试使用urllib.urlopen()并且第一次尝试使用requests.get()时,这是正确的。据我所知,在其他时间工作之前我还没有做过任何特别的事情。每次它起作用,它都会在下一次失败。

  • 我尝试在Chrome上禁用Javascript,然后打开网址以获取没有JS的DOM。它和以前一样。 - >我猜这不是用JS添加到DOM的东西的问题。
  • 如前所述,我尝试过urllib并请求。两者都不一致。
  • Cookie不应成为问题,因为会话每次都会更改。
  • 当我在Cloud9上时,我无法在浏览器中使用Selenium。

1 个答案:

答案 0 :(得分:0)

该网站正在使用一些防刮技术。您必须设置User-Agent标头以伪造浏览器访问。

url = 'http://www.seloger.com/list.htm?idtt=1&idtypebien=1,2&ci=750120,750114&tri=initial&naturebien=1&nb_pieces=2&pxmax=1250&surfacemin=40'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
seloger_html = requests.get(url, headers=headers)

也尽量不要刮得太快。