课程参考代码:爬取电影名称、链接并写入文件
import urllib.request as urlrequest
from bs4 import BeautifulSoup
top250_url="https://movie.douban.com/top250?start={}&filter="
with open('douban_250.txt','w') as outputfile:
for i in range(10):
start=i*25
url_visit=top250_url.format(start)
crawl_content=urlrequest.urlopen(url_visit).read()
http_content=crawl_content.decode('utf8')
soup=BeautifulSoup(http_content,'html.parser')
all_item_divs=soup.find_all(class_='item')
for each_item_div in all_item_divs:
pic_div=each_item_div.find(class_='pic')
item_href=pic_div.find('a')['href']
item_name=pic_div.find('img')['alt']
outputfile.write('{} {}\n'.format(item_href,item_name))
print('{} {}\n'.format(item_href,item_name))
练习:尝试爬取豆瓣图书TOP250信息
需要爬取的top250图书的名称、评分、链接、以及一句话评价,如下图
参考代码
import urllib.request as urlrequest
from bs4 import BeautifulSoup
top250_url="https://book.douban.com/top250?start={}"
for i in range(10):
start=i*25
url_visit=top250_url.format(start)
crawl_content=urlrequest.urlopen(url_visit).read()
http_content=crawl_content.decode('utf8')
soup=BeautifulSoup(http_content,'html.parser')
all_item_divs=soup.find_all(class_='item')
for each_item_div in all_item_divs:
title_div=each_item_div.find(class_='pl2')
item_href=title_div.find('a')['href']
item_name=title_div.find('a')['title']
score_div=each_item_div.find(class_='star clearfix')
rating=score_div.find(class_='rating_nums').get_text()
describe_div=each_item_div.find(class_='quote')
describe=describe_div.find(class_='inq').get_text()
print('{} {} {}\n{}\n'.format(item_name,rating,item_href,describe))
延伸案例:爬取腾讯游戏今日新闻
页面地址:http://games.qq.com/
需爬取的信息如下:(包含每个新闻的标题、链接、文字内容)
参考代码如下,请务必自己先练习
import urllib.request as urlrequest
from bs4 import BeautifulSoup
url ="http://games.qq.com/"
content=urlrequest.urlopen(url).read().decode('gbk')
soup=BeautifulSoup(content,'html.parser')
#获取热点新闻
all_top_news=soup.find_all(class_='pic_txt_list t_news_list')
with open('output.txt','w') as outputfile:
for each_item_div in all_top_news: #
#获取新闻链接
item_href=each_item_div.find('a')['href']
#获取新闻标题
item_name=each_item_div.find('img')['alt']
print('{} {}\n'.format(item_href,item_name))
#获取正文
try: #由于新闻的正文可能只有图片没有文字,所以这里增加了一个异常处理的方式try/except
news_content=urlrequest.urlopen(item_href).read().decode('gbk')
soup2=BeautifulSoup(news_content,'html.parser')
content=soup2.find_all(class_='Cnt-Main-Article-QQ')
alltext=content[0].find_all('p')
text=[]
for i in alltext:
text.append(i.get_text())
except:#意思就是,如果出现错误,直接跳过
pass
#写入文件
outputfile.write('\n{}\n{}\n{}\n'.format(item_href,item_name,text))
练习:爬取小猪短租的页面信息(以成都为例)
需爬取的信息如下:(标题、链接、位置、评分)
地址如下 http://cd.xiaozhu.com/
参考带代码如下:
import urllib.request as urlrequest
from bs4 import BeautifulSoup
origin_url ="http://cd.xiaozhu.com/search-duanzufang-p{}-0/"
with open('xiaozhu.txt','w') as outputfile:
#翻页
for i in range(1,6):#括号里表示页数,获取1-5页的所有房源信息
url=origin_url.format(i)
content=urlrequest.urlopen(url).read().decode('utf8')
soup=BeautifulSoup(content,'html.parser')
allurls=soup.find_all(class_='resule_img_a')
#获取详细信息网址
for j in allurls:
list1=[]
list1.append(j.get('href'))
#解析详细信息网址
for href in list1:
content2=urlrequest.urlopen(href).read().decode('utf8')
soup2=BeautifulSoup(content2,'html.parser')
title=soup2.find('title').get_text()#标题
location=soup2.find(class_='pr5').get_text()#地址
score=soup2.find(class_='top_bar_w2 border_right_none').get_text()#评分
#写入文件
outputfile.write('\n{}\n{}\n{}\n{}\n'.format(title,href,location,score))
扩展阅读
现在你已经进入到爬虫课程的尾声,本章节末的扩展阅读,将主要提供给你一些有意思的爬虫应用,可能比较适合新手进行爬取的网站,最后是书籍的推荐。
1.有意思的爬虫应用
本次课程主要以豆瓣视频、气象网站信息为例,除此之外,爬虫还可以实现更多更有意思的事情。阅读以下链接的内容,扩展你关于爬虫实现功能的认知。
- 爬虫技术原来可以做这么多牛逼哄哄的事情!
- 你做过哪些有趣的基于网络爬虫的应用?
- Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
掌握了爬虫技能,就相当于手握海量数据的敲门砖。但对于不同的反爬虫限制,不同的网页结构,在现实应用中,会遇到各种各样的问题,只有多加练习才能灵活运用。
2.推荐给你继续爬虫任务的网站
- Linkedin网站最大的优点是提供了API,而且支持以CSV文件格式导出你的联系人的通讯录,试试爬取你的联系人信息吧!
- 知乎成为了最活跃的社区之一,利用爬虫爬取知乎的数据可以得到很多有意思的结论,也已经有很多前人的分享与结论,适合初学者的你进行参考。
- 如果想要获得更多的练习思路,可以阅读有哪些网站用爬虫爬取能得到很有价值的数据?,
3.阅读材料
对于学有余力的你,推荐以下三本书籍进行阅读。
爬虫是数据分析中获取数据的一种重要方式。从网上爬取了大量的数据之后,是否可以把数据按照一定的结构和联系储存起来,是否可以通过从公司的数据库里提取数据分析过程中需要用到的数据,以及如何进行现有数据清洗,让数据更加符合我们分析的要求,这也就是接下来第三章的主要内容。
在进入下一章节学习之前,建议各位同学不要一味求快,一定多多学习Python的基础知识,把基础打好,并时常回顾之前所学的知识,再进入下一章的学习。古人云,工欲善其事,必先利其器。古人又云,欲速则不达。古人还云,基础不牢,地动山摇。古人再云,骐骥一跃,不能十步,驽马十驾,功在不舍。加油吧。
恭喜!你已经完成第二章节所有的内容,请确认已经掌握这一章课程的内容,现在可以进入到下一章课程的学习。