我的第一个Python爬虫
2018-06-18 01:49:32来源:未知 阅读 ()
零基础学习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 name_list = soup.select('dd.\5c \22 detail\5c \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条信息。
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条商品信息,第一个简陋的爬虫完成。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash