2-6 应用案例:爬取豆瓣 TOP250 电影信息并存储(版本:py3)

课程参考代码:爬取电影名称、链接并写入文件

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.有意思的爬虫应用

本次课程主要以豆瓣视频、气象网站信息为例,除此之外,爬虫还可以实现更多更有意思的事情。阅读以下链接的内容,扩展你关于爬虫实现功能的认知。

2.推荐给你继续爬虫任务的网站

3.阅读材料

对于学有余力的你,推荐以下三本书籍进行阅读。

爬虫是数据分析中获取数据的一种重要方式。从网上爬取了大量的数据之后,是否可以把数据按照一定的结构和联系储存起来,是否可以通过从公司的数据库里提取数据分析过程中需要用到的数据,以及如何进行现有数据清洗,让数据更加符合我们分析的要求,这也就是接下来第三章的主要内容。

在进入下一章节学习之前,建议各位同学不要一味求快,一定多多学习Python的基础知识,把基础打好,并时常回顾之前所学的知识,再进入下一章的学习。古人云,工欲善其事,必先利其器。古人又云,欲速则不达。古人还云,基础不牢,地动山摇。古人再云,骐骥一跃,不能十步,驽马十驾,功在不舍。加油吧。

恭喜!你已经完成第二章节所有的内容,请确认已经掌握这一章课程的内容,现在可以进入到下一章课程的学习。

猜你喜欢

转载自blog.csdn.net/feng_jlin/article/details/82220323
今日推荐