来自 威尼斯国际官方网站 2019-10-09 23:25 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

本身的第三个Python爬虫

威尼斯国际官方网站 ,零基础学习Python,学习的年月加起来有三个多月了,作为二个尚未学过编制程序语言,只懂if语句的初学者,刚起始读书的时候看懂语法花了广新年华,语法基本没难点未来又开采有无数第三方库,这学起来的确是从入门到入坟。后来察觉爬虫挺有意思的,经过不懈努力,死了重重脑部细胞,在做别的交事务的时候还在想代码,在如此的情景下终于写出了第三个爬虫并打响抓取了数码,即使代码很烂(烂到不敢看),但依然想记录下来,让以往的投机看看从前的投机多么水!

本条爬虫要爬的是某生鲜品牌在天猫商店连锁店上的有所商品音信(包罗商品名称、价格、销量和评价),在Chrome上开采网址,在商品名那些使用检查,见到是在二个<a>标签中,复制商品名称到网页源代码中搜索开掘未有结果,尝试了一晃价格也是一样未有结果,表达这几个消息都以透过js异步加载的。那时就切换来network,重新载入页面,再去type是xhr、JavaScript、json的项逐项查看,终于在一个xhr的headers里旁观三个与原网站相似但多了有的东西的url,多的事物估量是该连锁店的营业所id,尝试展开url,发掘是多个从未有过图片,排版也相当粗略的网页,源代码里也许有商品消息,OK,这正是要爬取的的确指标。这里也尝尝了把url里有的音讯例如callback、json等去掉,只留下id有关音信,有八个id相关,一个mid,一个wid,分别去试,开掘厂商id是mid,即只留下mid音信,网页也能成功开采。

然后开端写代码,用到的库有requests、BeautifulSoup、csv,

1 import requests
2 from bs4 import BeautifulSoup
3 import csv
4 
5 wb_data = requests.get(url)
6 soup = BeautifulSoup(wb_data.text, 'lxml')

运作,出错,错误原因:HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.

被重定向了,思量要出席headers,对要爬取的网页检查,切换来network,重新载入,去复制里面headers里的user-agent和cookie音信,那样就能够伪装成浏览器在殡葬request,增多了headers之后重试,print(soup)能够获取网页源代码。

接下去要稳住商品音信,对商品名称检查,在<a>标签中,copy selector,在搜寻里粘贴,去掉尾部,只留下父级标签,共有39条寻找结果,与网页上物品数量一致

威尼斯国际官方网站 1

 

 

1 name_list = soup.select('dd.5c 22 detail5c 22 > a')

运作,出错,错误原因:不正规的selector,挂念是"detail"这里的主题材料,于是选取soup.select('dd."detail" > a'),依旧极度,不精晓怎么管理“”那样的特殊字符,试过正则,soup.find(),都十一分,没辙了就想不写css样式了,只用竹签dd > a,先找找,发现39条搜索结果,与后面同一,对于如此数据少的网页以致被作者取巧了(汗颜,水平太次)。同样的艺术来稳固别的音信,价格用的是div > span,查找到117条,正好39的3倍,稳重看率先个span标签文本是¥,第叁个是价格,首个是销量,那样使用list的切成片功用就能够分级得到价格和销量的音讯了。再寻觅评价,h4 > a > span,找到29条,回网页看了下,开采39天商品音讯里最终10条是本店推荐介绍,即共有29件货色,10件推荐介绍,没有涉及,后边使用zip函数能够去掉不对称的10条音信。

威尼斯国际官方网站 2

1 name_list = soup.select('dd > a')
2 price_list = soup.select('div > span')[1::3]
3 salenum_list = soup.select('div > span')[2::3]
4 evaluatenum_list = soup.select('h4 > a > span')

最终把多少导入csv

1 writer = csv.writer(open('', 'w', newline=''))
2 field = ('商品名称','价格','销量','评价数')
3 writer.writerow(field)
4 for name,price,salenum,evaluatenum in zip(name_list,price_list,salenum_list,evaluatenum_list):
5     row = (name.text,price.text.strip(),salenum.text,evaluatenum.text)
6     writer.writerow(row)

newline=''是为了csv里没有空行,strip()去掉价格文本里的空格,运行,打开csv文件,看到里面有29条商品信息,第一个简陋的爬虫完成。

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:本身的第三个Python爬虫

关键词: