python3爬虫初步之正则表达式实战
2019-03-02 14:49
363 查看
**
爬虫初步之正则表达式实战
**
关于正则表达式的介绍及用法读者可以去百度,这里就不再赘述了,默认大家已经了解过正则表达式了,下面直接开始实战。
利用requests以及正则表达式爬取豆瓣电影Top250
一、访问目标网址并找出网址规律
豆瓣电影Top250的网址是:https://movie.douban.com/top250,点进去以后部分网页内容如下:
我们只能看到第一页的数据,只包含25条,而网页总共有10页包含250条信息,我们再点击第二页,发现网页的URL发生了变化,如下图:
比首页多出了start=25(&以及以后的可以忽略),我们再点击第三页,发现start=后面的值变成了50,以此类推,后一页比前一页多加25,那么第一页应该就是0,所以,第一页完整的网址应该是https://movie.douban.com/top250?start=0,总共有10页,也就是累加9次。
那么URL的规律用代码就可以实现了,具体如下:
''' 250个电影,一页显示25个,总共10页,即url地址start=后累加9次 ''' # 添加浏览器用户代理 # hearders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) " # "Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0" # } url = "https://movie.douban.com/top250?start=" # 豆瓣top250网址,strart=后面加页数,比如第一页就是0,第二页是25,每次累加25 rules = r'<div class="hd">([\d\D]*)</li>' # 正则表达式匹配电影信息 for i in range(10): whole_url = url + str(i*25) print(whole_url)
二、提取想要的信息
使用Chrome浏览器访问目标网址,按F12查看网页源码,点击下图所示小箭头后再点击网页上想获取的信息,就能看到目标信息所对应的标签
我们所需的电影信息如下图:
是在
rules = r'<div class="hd">([\d\D]*)</li>' # 正则表达式匹配电影信息 def match(rule, html): ''' 利用正则表达式从源代码中匹配想要获取的内容 ''' result = re.findall(rule,html) return result
最后将获取的信息存入文件,获取的文件比较杂乱
现在是初学阶段,关于数据的清洗和入库以后再谈。
附源码:
import requests # 导入requests库 import re # 导入正则表达式 import time def loadPage(url): ''' 访问目标地址,并返回网页源代码 ''' response = requests.get(url=url).content # 访问目标网址 response = str(response, 'utf-8') return response def match(rule, html): ''' 利用正则表达式从源代码中匹配想要获取的内容 ''' result = re.findall(rule,html) return result def dataSave(datas): ''' 将获得的数据写入txt文档 ''' for data in datas: with open("豆瓣Top250.txt", 'a', encoding='utf-8') as f: f.write(data) def main(): ''' 250个电影,一页显示25个,总共10页,即url地址start=后累加9次 ''' # 添加浏览器用户代理 # hearders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) " # "Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0" # } url = "https://movie.douban.com/top250?start=" # 豆瓣top250网址,strart=后面加页数,比如第一页就是0,第二页是25,每次累加25 rules = r'<div class="hd">([\d\D]*)</li>' # 正则表达式匹配电影信息 for i in range(10): whole_url = url + str(i*25) print("正在获取第%d页" %(i+1)) content = loadPage(whole_url) # 获取每一页的内容 datas = match(rules, content) # 获取电影内容 dataSave(datas) # 将数据写入文件 time.sleep(3) # 每获取一页等3s后再获取下一页 if __name__ == '__main__': main()
相关文章推荐
- python爬虫学习实践(一):requests库和正则表达式之淘宝爬虫实战
- python爬虫中requests库和正则表达式之淘宝爬虫实战
- python爬虫学习(1)--关于正则表达式输入和提取中文
- Python入门-编写抓取网站图片的爬虫-正则表达式
- 转载——python和爬虫的正则表达式
- 06Python爬虫---正则表达式01之原子
- [python爬虫] 正则表达式使用技巧及爬取个人博客实例
- python爬虫之re正则表达式库
- python3爬虫之入门和正则表达式,获取IP地址, 隐马尔可夫模型及其在分词中的简单应用
- python爬虫和正则表达式
- 06Python爬虫---正则表达式04之常用表达式
- python爬虫之正则表达式程序
- python3爬虫之入门和正则表达式
- Python爬虫入门(7):正则表达式
- python 正则表达式基础实战
- 把玩之python爬虫正则表达式
- Python3爬虫之入门和正则表达式
- python爬虫初步之Xpath实战
- Python爬虫知识(2)——正则表达式复习
- 转 Python爬虫入门七之正则表达式