我正在尝试使用Python和beauthoulsoup构建一个web抓取工具,它可以进入一个eBay特色的收藏,并检索该收藏中所有产品的url(大多数收藏有17个产品,尽管有些产品或多或少有一些)。下面是我试图在代码中获取的集合的URL:http://www.ebay.com/cln/ebayhomeeditor/Surface-Study/324079803018
以下是我目前为止的代码:
import requests
from bs4 import BeautifulSoup
url = 'http://www.ebay.com/cln/ebayhomeeditor/Surface-Study/324079803018'
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
product_links = []
item_thumb = soup.find_all('div', attrs={'class':'itemThumb'})
for link in item_thumb:
product_links.append(link.find('a').get('href'))
print product_links
这个刮板应该附加17个链接到列表产品链接。然而,它只能起到部分作用。具体地说,它每次只抓取前12个产品链接,剩下的5个未被触及,尽管所有17个链接都在相同的HTML标记和属性中找到。仔细查看页面的HTML代码,我发现的唯一区别是,前12个链接和最后5个链接由我在这里包含的一段XML脚本分隔开:
^{pr2}$这个脚本的功能是什么?有没有可能这个脚本是我的铲运机忽略了最后5个环节的原因?有没有一种方法可以绕过这一点,并在最后五场比赛中脱颖而出?在
最后几个是通过ajax请求http://www.ebay.com/cln/_ajax/2/ebayhomeeditor/324079803018生成的:
这个url是使用ebayhomeditor和必须是某个产品id324079803018组成的,它们都在您访问的页面的原始url中。在
获取数据所必需的唯一参数是itemsPerPage,但您可以使用其他参数,看看它们有什么效果。在
这会给你:
^{pr2}$所以把它放在一起就可以得到所有的网址:
返回的内容有点重叠,所以只需使用一个集合来存储列表中的主URL或调用集:
不知道为什么会发生这种情况,而且还没有真正尝试解决它,如果它困扰您,那么您可以从ajax调用返回的源代码中解析“totalItems:17”,并在第一次调用后减去
main_urls
的长度,并设置{"itemsPerPage": str(len(main_urls) - int(parsedtotal))}
,但我不会对此太担心。在相关问题 更多 >
编程相关推荐