我目前正在使用BS4编写python来从网页获取HTML代码。基本上我开始从网站上提取价格和名称,它正在运作。接下来我知道的事情就是停止工作,即使我根本没有改变代码。目前我只是想知道是否有办法解决这个问题以及究竟发生了什么。我是新手,当谈到这些事情,我只是试图提高我的编码技能,通过我的这个小项目,在newegg上刮擦GPU的价格和型号。我确实抬头试图找到答案......但就像我说我是一个新手,可能不知道术语(我自己自学)。 如果你想看看我做了什么,这是我的代码:
from bs4 import BeautifulSoup
import lxml
import pandas
import requests,re
#webscrap prices off of newegg
r_newegg=requests.get(URL GOES HERE)
c_newegg=r_newegg.content
soup_newegg=BeautifulSoup(c_newegg,"html.parser")
print(soup_newegg)
newegg_price=soup_newegg.find_all("div",{"class":"item-action"})
#newegg_price[0].find("span").next_sibling.next_sibling.text ## this is the way to find the price
newegg_name=soup_newegg.find_all("a",{"class":"item-title"})
print(newegg_name.find("a").text)
print(newegg_name[0].find("a"))
newegg=[]
for price,name in zip(newegg_price,newegg_name):#don't forget to use zip to iterate through two lists
d={}
try:
d["Price"]=price.find("span").next_sibling.next_sibling.text
except:
pass
答案 0 :(得分:3)
在访问该页面几次后,抓取页面停止工作,因为该网站使用reCaptcha。
当网页抓取停止工作时,您可以通过在浏览器中手动打开URL来验证这一点,这可能会显示类似于此的reCaptcha机器人警告: 但是,在Web浏览器中手动访问页面后(可能需要勾选“我不是机器人”表单),您应该能够再次运行代码并刮擦页面。
至于从页面中抓取数据,并检索项目名称和价格,此代码应该完成这项工作。我添加了一些字符串输出编号和格式,以便于阅读结果:
items = soup.find_all('div', {'class':'item-container'})
names = []
prices = []
for item in items:
names.append(item.find('a', {'class': "item-title"}).text.strip('\n').strip(' ').strip('\n'))
for price in item.find_all('li', {'class': 'price-current'}):
prices.append(''.join([price.strong.text.strip(), price.sup.text.strip()]))
items_prices = zip(prices, names)
for n, (price, item) in enumerate(items_prices):
print 'Item #{n}: {p} : {i}'.format(n=n+1, p=price, i=item)
输出:
Item #1: 139.99 : EVGA GeForce GTX 1050 FTW GAMING ACX 3.0, 02G-P4-6157-KR, 2GB GDDR5, DX12 OSD Support (PXOC)
Item #2: 699.99 : GIGABYTE GeForce GTX 1080 Ti DirectX 12 GV-N108TGAMING OC-11GD 11GB 352-Bit GDDR5X PCI Express 3.0 x16 ATX Video Card
Item #3: 119.99 : GIGABYTE GeForce GTX 1050 DirectX 12 GV-N1050OC-2GD 2GB 128-Bit GDDR5 PCI Express 3.0 x16 ATX Video Card
Item #4: 159.99 : GIGABYTE GeForce GTX 1050 Ti DirectX 12 GV-N105TWF2OC-4GD 4GB 128-Bit GDDR5 PCI Express 3.0 x16 ATX Video Card
Item #5: 139.99 : GIGABYTE GeForce GTX 1050 Ti DirectX 12 GV-N105TD5-4GD 4GB 128-Bit GDDR5 PCI Express 3.0 x16 ATX Video Cards
Item #6: 809.99 : EVGA GeForce GTX 1080 Ti SC2 HYBRID GAMING, 11G-P4-6598-KR, 11GB GDDR5X, HYBRID & LED, iCX Technology - 9 Thermal Sensors
...
Item #35: 109.99 : ZOTAC GeForce GTX 1050 DirectX 12 ZT-P10500A-10L 2GB 128-Bit GDDR5 PCI Express 3.0 HDCP Ready Video Card
Item #36: 719.99 : ASUS GeForce GTX 1080 Ti DirectX 12 TURBO-GTX1080TI-11G 11GB 352-Bit GDDR5X PCI Express 3.0 HDCP Ready SLI Support Video Card
希望这有帮助。