用selenium爬当当网商品信息

【项目介绍】

参考崔庆才老师《Python3网络爬虫开发实战》第七章动态渲染页面爬取里爬淘宝网的实例,由于现在淘宝网查找需要先登录,故用当当网进行尝试。
1.动态加载页面的判断?
F12→找到对应url的response,看到返回的页面是一个网页框架,并没有出现商品信息,以此我们可以大致判断是异步加载(注意,在network里看response的html,不要在element里看,这里返回的才是最真实的。)
用selenium爬当当网商品信息_第1张图片
如何查找异步加载的信息呢?如下操作:
选中XHR,在里面可以发现三个php形式的链接,均返回json数据,随着商品页面的滑动,可以发现类似的链接会逐渐加载出来,由此可判断是异步加载。
用selenium爬当当网商品信息_第2张图片
2.直接根据URL查找json数据即可,为什么要用selenium?
由下图可以看到要根据URL获取json数据,要构造URL,这里提交的数据包括keys(即商品的id),显然比较麻烦,而且我暂时没有发现找到id的方法。故用selenium,这个库实现所看皆可爬,通过控制浏览器实现页面跳转的功能,就可以直接在html里去找到想要的内容。
用selenium爬当当网商品信息_第3张图片

【项目工具】

pycharm+selenium+webdriver:后面两个如何安装上一篇已经介绍。

【项目流程】

1.构造webdriver并打开商品页第一页(即搜索ipad的第一页),这里还加了一个等待时间,防止出现异常。

browser = webdriver.Chrome()
wait = WebDriverWait(browser,10)
keyword = 'ipad'
page=1
url = 'http://search.dangdang.com/?key='+quote(keyword)+'&act=input'
browser.get(url)
print('正在爬取第', page, '页')
get_products()
for page in range(2,5):
    index_page(page)

2.爬取商品信息,用正则表达式构造,商品信息的图片有两种表达形式,故分成了两个正则表达式,其实也可以合并获取用解析库BeautifulSoup解析更好。

#这个方法用于抓取商品信息,由于商品图片的html类型有两种,故构造了两个正则表达式,其实也可以把data-original设为可选,合并成一个。
def get_products():
    html = browser.page_source
    pattern1 = re.compile('
  • (.*?).*?
  • '

    你可能感兴趣的:(Python爬虫,python)