网页抓取Newegg - Python

时间:2017-06-26 22:04:51

标签: python web-scraping

我目前正在使用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

1 个答案:

答案 0 :(得分:3)

在访问该页面几次后,抓取页面停止工作,因为该网站使用reCaptcha

当网页抓取停止工作时,您可以通过在浏览器中手动打开URL来验证这一点,这可能会显示类似于此的reCaptcha机器人警告: enter image description here 但是,在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

希望这有帮助。