我正在尝试从lowes.com获取产品信息。我的测试特别是这个产品AirStone 8-sq ft Autumn Mountain Faux Stone Veneer。当我在没有启用JavaScript的情况下访问该页面时(为了确保我没有看到urllib /请求可能无法接收的内容)我明显得到该项目的价格但是当我尝试使用上述任何一个包时我遗漏了几个网页的各个部分。
恰好这些部分是我需要抓取的部分(特别是价格信息,其他一切神奇地仍然可用)。我不想为了速度而不使用硒。我现在对Requests和urllib的使用情况如此
普通物品
$(document).ready( ... )
的urlopen
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 :(
所以问题是,我错过了什么吗?是否有理由错过这个?它并不是javascript相关的,因为我在尝试抓取数据之前故意禁用它,因为我发现很多时候这是一个问题。
非常感谢任何帮助。
答案 0 :(得分:0)
根据jasonharper的评论。 Cookie最终成为了答案。找到合适的一个允许我提取所有必要的数据。
简而言之,除非确保您看到脚本看到的内容,否则请务必在尝试抓取网站之前禁用/删除Cookie。
对于那些好奇的人来说,特定的cookie是{&#34; sn&#34;:&#34; ####&#34;}(商店编号)您只需选择一个商店并将鼠标悬停在其上并启用javascript查看它链接的网址,找出商店编号。改为适合