【问题标题】:urlopen/requests.get not getting all page contenturlopen/requests.get 没有获取所有页面内容
【发布时间】:2017-05-19 20:20:23
【问题描述】:

我正在使用 Python 搜索房地产网站以获取有关公寓的信息。我需要的所有信息都在存储在页面头部 (ava_data) 中的 javascript 变量中。

我在 cloud9(在线 IDE)上工作,我不希望退出它。 我正在使用 Beautiful Soup 进行刮痧。

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 中的检查中得到的相同):https://ufile.io/eue0b
如果没有,我会得到以下信息:https://ufile.io/f1dnx

在数十次试验中,我只成功获得了 4-5 次正确的文件。据我所知,我第一次尝试使用 urllib.urlopen() 和第一次尝试使用 requests.get() 是正确的。据我所知,在其他时间起作用之前,我没有做过任何特别的事情。而且每次都成功了,下一次就失败了。

  • 在打开 url 以获取没有 JS 的 DOM 之前,我尝试在 Chrome 上禁用 Javascript。这和以前一样。 --> 我猜这不是用 JS 添加到 DOM 的问题。
  • 如前所述,我尝试了 urllib 和 requests。两者工作不一致。
  • Cookie 不应该成为问题,因为会话每次都会更改。
  • 由于我在 Cloud9 上,因此无法将 Selenium 与浏览器一起使用。

【问题讨论】:

标签: javascript python beautifulsoup


【解决方案1】:

该网站正在使用一些反抓取技术。您必须将 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)

同时尽量不要刮得太快。

【讨论】:

  • 谢谢!有效!我很高兴知道这不是我错过的一些愚蠢的事情。您能否告诉我是什么让您知道他们使用了反刮擦技术?
猜你喜欢
  • 1970-01-01
  • 2017-01-15
  • 2017-08-18
  • 2014-10-02
  • 2019-07-25
  • 2022-01-12
  • 1970-01-01
  • 2018-01-02
  • 2012-08-28
相关资源
最近更新 更多