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

示例网页用豆瓣电影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)爬取现实页面)