【发布时间】:2017-10-22 21:11:14
【问题描述】:
我在尝试从各个页面抓取一些数据时遇到问题。我已经尝试谷歌一些解决方案,但根本没有用。
我的意思是从这个网站上抓取显卡的名称:“https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&bop=And&Depa=1&Category=38&Page=2&PageSize= 12&order=BESTMATCH"
首先,我尝试构建仅适用于其中一个页面的代码。而且效果很好。
from urllib2 import urlopen as uReq
from bs4 import BeautifulSoup as soup
import requests
import re
my_url = "https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&bop=And&Depa=1&Category=38&Page=2&PageSize=12&order=BESTMATCH"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div",{"class":"item-container"})
container = containers[0]
for container in containers:
title_container = container.findAll("a",{"class":"item-title"})
product_name = title_container[0].text
print("product_name: " + product_name)
######## 有了这个,我在第 2 页得到了图形卡的名称。如果我在 HTML 中将它切换为 1,我也可以得到第一个的名称。
#######
我试图做一个循环来处理它,但它似乎只是一遍又一遍地返回第一页。
i = 1
my_url = "https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&bop=And&Depa=1&Category=38&Page={}&PageSize=12&order=BESTMATCH".format(i)
while i <= 3:
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
# esse é o que vou usar para fazer o loop
containers = page_soup.findAll("div",{"class":"item-container"})
container = containers[0]
for container in containers:
title_container = container.findAll("a",{"class":"item-title"})
product_name = title_container[0].text
print("product_name: " + product_name)
i = i+1
有人可以帮我吗? =D
PS:各位,请随意更改我的代码并提出更好的解决方案。 PS 2:Jupyter 实验室的 Python 3.5。
【问题讨论】:
标签: web web-scraping beautifulsoup python-requests