美文网首页
Python爬虫学习笔记(1.2)爬取现实页面

Python爬虫学习笔记(1.2)爬取现实页面

作者: RickyLin7 | 来源:发表于2017-04-06 08:08 被阅读0次

    示例网页用豆瓣电影top250。豆瓣top250其实是一个多页面的爬取,并没有什么可怕之处,首先做第一个页面的爬虫

    from bs4 import BeautifulSoup
    import requests
    import time
    
    url = 'https://movie.douban.com/top250?start=0&filter='
    
    wb_data = requests.get(url)
    soup = BeautifulSoup(wb_data.text,'lxml')
    
    imgs = soup.select('#content div.pic > a > img')
    titles = soup.select('#content div.info > div.hd > a > span')
    rates = soup.select('#content span.rating_num')
    
    for img,title,rate in zip(imgs,titles,rates):
        data = {
            'img':img.get('src'),
            'title':title.get_text(),
            'rate':rate.get_text()
        }
        print(data)
    

    OK,做完一个之后其实工作完成了大半,接下来稍微修改即可。

    B71EFAAF-4FD4-4F74-BF68-905593E48EBF.png 8401C0A7-1833-495D-88A5-2D0E1EB8A850.png

    上面两张图是豆瓣top250第一页和第二页的链接,不难看出只有start后面的数字在发生改变,其实这个数字代表的就是每个页面的加载量,每页都会加载25个电影,找到这个规律后我们使用列表推导式完成多页面的集合,修改上面的url行如下。

    urls = ['https://movie.douban.com/top250?start={}&filter='.format(str(i)) for i in range(0,250,25)]
    

    之后将这些代码都封装进一个函数中,用for循环读出即可,最终代码如下。

    from bs4 import BeautifulSoup
    import requests
    import time
    
    urls = ['https://movie.douban.com/top250?start={}&filter='.format(str(i)) for i in range(0,250,25)]
    
    def get_attractions(url,data=None):
        wb_data = requests.get(url)
        time.sleep(2)
        soup = BeautifulSoup(wb_data.text,'lxml')
    
        imgs = soup.select('#content div.pic > a > img')
        titles = soup.select('#content div.info > div.hd > a > span')
        rates = soup.select('#content span.rating_num')
    
        if data == None:
            for img,title,rate in zip(imgs,titles,rates):
                data = {
                    'img':img.get('src'),
                    'title':title.get_text(),
                    'rate':rate.get_text()
                }
                print(data)
    
    for single_url in urls:
        get_attractions(single_url)
    

    这里引入了python的time模块,使用它的sleep()方法来推迟调用线程的运行,这里用来让爬虫每隔两秒请求一次,可以防止有的网站因为频繁的请求把我们IP封掉。

    相关文章

      网友评论

          本文标题:Python爬虫学习笔记(1.2)爬取现实页面

          本文链接:https://www.haomeiwen.com/subject/ttwxattx.html