Webscraping 不检索整个文档 urllib 或请求
Webscraping not retrieving entire document urllib or requests
我正在尝试从 lowes.com 抓取产品信息。我的测试专门是这个产品AirStone 8-sq ft Autumn Mountain Faux Stone Veneer。当我在没有启用 JavaScript 的情况下访问页面时(以确保我没有看到 urllib / requests 可能无法获取的东西)我清楚地得到了该项目的价格但是当我尝试使用上面的任何一个包时我是缺少网页的几个部分。
碰巧这些部分是我需要抓取的部分(特别是价格信息,其他一切都神奇地仍然可用)。为了速度,我不想使用硒。我目前对 Requests 和 urllib 的使用看起来是这样的
常用项目
from urlopen import Request, urlopen
import requests # switch as needed with urlopen
import gzip # manual deflation required with Request object urlopen or so I've found
url = "https://www.lowes.com/pd/AirStone-8-sq-ft-Autumn-Mountain-Faux-Stone-Veneer/50247201"
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"DNT": "1",
# "Host": "www.lowes.com", Tried, no difference
"Pragma": "no-cache",
# "Referer": "https://www.lowes.com/", Tried, no difference
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1 Win64 x64) AppleWebKit/537.36 (KHTML,"
" like Gecko) Chrome/59.0.3071.115 Safari/537.36" # <=- Tried placing all on one line, didn't make a difference
}
网址打开
req = Request(url, None, headers)
page = gzip.decompress(urlopen(req).read()).decode('utf-8')
with open("content.txt", "w") as f:
f.write(page) # <=- missing the 59.97 price tag anywhere in the document :(
请求
sessions = requests.Session()
page = sessions.get(self.url, headers=headers)
with open("content.txt", "w") as f:
f.write(page) # <=- Also missing the 59.97 price tag anywhere in the document :'(
所以问题是,我是不是漏掉了什么?有没有理由丢失它?它与 javascript 无关,因为我在尝试抓取数据之前故意禁用它,因为我发现这在很多时候都是一个问题。
如有任何帮助,我们将不胜感激。
根据 jasonharper 的评论。饼干最终成为了答案。找到合适的那个让我能够提取所有必要的数据。
简而言之,如果只是为了确保您看到脚本看到的内容,那么在尝试抓取网站之前始终禁用/删除 cookie。
对于那些好奇的人来说,特定的 cookie 是 {"sn": "####"}(商店编号)您可以简单地选择一家商店并将鼠标悬停在它上面并启用 javascript 查看url 它链接到查找商店编号。换装
我正在尝试从 lowes.com 抓取产品信息。我的测试专门是这个产品AirStone 8-sq ft Autumn Mountain Faux Stone Veneer。当我在没有启用 JavaScript 的情况下访问页面时(以确保我没有看到 urllib / requests 可能无法获取的东西)我清楚地得到了该项目的价格但是当我尝试使用上面的任何一个包时我是缺少网页的几个部分。
碰巧这些部分是我需要抓取的部分(特别是价格信息,其他一切都神奇地仍然可用)。为了速度,我不想使用硒。我目前对 Requests 和 urllib 的使用看起来是这样的
常用项目
from urlopen import Request, urlopen
import requests # switch as needed with urlopen
import gzip # manual deflation required with Request object urlopen or so I've found
url = "https://www.lowes.com/pd/AirStone-8-sq-ft-Autumn-Mountain-Faux-Stone-Veneer/50247201"
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"DNT": "1",
# "Host": "www.lowes.com", Tried, no difference
"Pragma": "no-cache",
# "Referer": "https://www.lowes.com/", Tried, no difference
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1 Win64 x64) AppleWebKit/537.36 (KHTML,"
" like Gecko) Chrome/59.0.3071.115 Safari/537.36" # <=- Tried placing all on one line, didn't make a difference
}
网址打开
req = Request(url, None, headers)
page = gzip.decompress(urlopen(req).read()).decode('utf-8')
with open("content.txt", "w") as f:
f.write(page) # <=- missing the 59.97 price tag anywhere in the document :(
请求
sessions = requests.Session()
page = sessions.get(self.url, headers=headers)
with open("content.txt", "w") as f:
f.write(page) # <=- Also missing the 59.97 price tag anywhere in the document :'(
所以问题是,我是不是漏掉了什么?有没有理由丢失它?它与 javascript 无关,因为我在尝试抓取数据之前故意禁用它,因为我发现这在很多时候都是一个问题。
如有任何帮助,我们将不胜感激。
根据 jasonharper 的评论。饼干最终成为了答案。找到合适的那个让我能够提取所有必要的数据。
简而言之,如果只是为了确保您看到脚本看到的内容,那么在尝试抓取网站之前始终禁用/删除 cookie。
对于那些好奇的人来说,特定的 cookie 是 {"sn": "####"}(商店编号)您可以简单地选择一家商店并将鼠标悬停在它上面并启用 javascript 查看url 它链接到查找商店编号。换装