我试图从一家网上商店抓取产品,类似于Dropified从阿里快递中抓取商品的方式,
当前解决方案(它的设置方式只会尝试访问第一项):
from bs4 import BeautifulSoup
import requests
import time
import re
# Get search inputs from user
search_term = raw_input('Search Term:')
# Build URL to imdb.com
aliURL = 'https://www.aliexpress.com/wholesale?SearchText=%(q)s'
payload = {'q': search_term, }
# Get resulting webpage
r = requests.get(aliURL % payload)
# Build 'soup' from webpage and filter down to the results of search
soup = BeautifulSoup(r.text, "html5lib")
titles = soup.findAll('a', attrs = {'class': 'product'})
itemURL = titles[0]["href"]
seperatemarker = '?'
seperatedURL = itemURL.split(seperatemarker, 1)[0]
seperatedURL = "http:" + seperatedURL
print seperatedURL
IR = requests.get(seperatedURL)
Isoup = BeautifulSoup(IR.text, "html5lib")
productname = Isoup.findAll('h1')
print productname
此解决方案假设页面上的项目不需要 javascript,如果该项目需要,它只会在文档准备好之前检索初始页面。
我意识到我可以使用 python 网络驱动程序,但我想知道是否有任何其他解决方案可以解决这个问题,可以轻松实现网络抓取工具的自动化。
结帐selenium
用phantomjs
。selenium
并phantomjs
处理大部分与页面上 JS 生成内容相关的问题。你甚至不需要再考虑这些事情了。
如果您正在抓取许多页面并希望加快速度,您可能希望异步执行操作。对于中小型设置,您可以使用RQ
. 对于较大的项目,您可以使用celery
. 这些工具允许您同时抓取多个页面(尽管不是同时)。
请注意,到目前为止我提到的工具与asyncio
其他async
框架无关。
我尝试抓取一些电子商务页面,并注意到该程序花费了 80% 的时间等待 HTTP 调用返回某些内容。使用上述工具,您可以将 80% 减少到 10% 或更少。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句