正则表达式(2)-应用举例

爬取学校网站的链接

import requests
import re
url = 'http://www.whut.edu.cn/'
r = requests.get(url)
r.encoding = 'utf-8'
text = r.text
links = re.findall('(http.*?)"', text,re.S)
for each in links:
    print(each)

在这里插入图片描述

sub实现自动翻页

爬取豆瓣Top250

  1. 根据HTML页面确定相关元素在这里插入图片描述在这里插入图片描述
    2.观察url与页面的关系
    在这里插入图片描述
  2. 利用sub进行翻页
import requests
import re
from fake_useragent import UserAgent
ua = UserAgent()
kv = {'user-agent': ua.random}  # 构造user-agent来伪装爬虫程序
url = 'https://movie.douban.com/top250?start=0&filter='
for i in range(0, 10):
    sum_page = i*25
    new_url = re.sub('start=\d+', 'start=%d'%sum_page, url, re.S ) ####关键代码######
    r = requests.get(new_url, headers=kv)

3.完整的提取过程 在这里插入图片描述

完整代码:

import requests
import re
from fake_useragent import UserAgent
ua = UserAgent()
kv = {'user-agent': ua.random}
url = 'https://movie.douban.com/top250?start=0&filter='
for i in range(0, 10):
    sum_page = i*25
    new_url = re.sub('start=\d+', 'start=%d'%sum_page, url, re.S )
    r = requests.get(new_url, headers=kv)
    r.encoding = 'utf-8'
    text = r.text
    numbers = re.findall('<em class="">(.*?)</em>', text, re.S)
    movies = re.findall('<span class="title">(.*?)</span>', text, re.S)
    for number in numbers:
        index = -1
        for movie in movies:
            index += 1
            if '&' not in movie:
                print(f'{number}' + ':', movie)
                movies[index] = '&'
                break

成果展示
在这里插入图片描述

  • 中间利用了fake_useragent库来伪造header
    有关伪造user-agent
  • 采取每页处理完再爬取下一页的思路
  • 中间爬取电影名字的时候并不是很完美,采用识别关键符号 &
    因为爬取的列表实际上是这样的:
    在这里插入图片描述
    并不完全是汉字,但每个非汉字的部分都含有&符号,剔除剩下的子列就是电影的排序
posted @ 2020-01-30 21:29  10nnn4R  阅读(176)  评论(0编辑  收藏  举报