爬虫入门-5-1.正则表达式在爬虫中的应用

1.爬取百思不得姐段子

 1 import requests
 2 import re
 3
 4
 5 def parse_url(url):
 6     headers = {
 7         ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) ‘
 8                       ‘AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘
 9     }
10     response = requests.get(url, headers=headers, timeout=10)
11     text = response.text
12     # 1.正则表达式规则注意标签后必须加.*?
13     contents = re.findall(r‘<div class="j-r-list-c-desc">.*?<a.*?>(.*?)</a>‘, text, re.DOTALL)
14     # 2.新建列表,保存修改过的段子
15     jokes = []
16     for content in contents:
17         # dz类型为<class ‘str‘>
18         dz = re.sub(r"<br.*?>", "", content)
19         # 3.将段子加入到列表
20         jokes.append(dz)
21         for joke in jokes:
22             # 4.将段子存储到文件中
23             with open(‘3.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
24                 f.write(joke)
25                 f.write(‘\n\n‘)
26
27
28 def main():
29     url = ‘http://www.budejie.com/text/1‘
30     for x in range(1, 10):
31         url = ‘http://www.budejie.com/text/%s‘ % x
32         parse_url(url)
33
34
35 if __name__ == ‘__main__‘:
36     main()

2.爬取豆瓣新书首页

 1 import re
 2 import requests
 3 import os
 4
 5 PROXY = {
 6     ‘HTTPS‘: ‘116.209.55.208:9999‘
 7 }
 8
 9
10 def spider():
11     url = ‘https://book.douban.com/latest?icn=index-latestbook-all‘
12     response = requests.get(url, proxies=PROXY)
13     # 获取图片只能用response.text,不能用response.content
14     html = response.text
15     # 获取图片只需要写src属性正则
16     titles = re.findall(r‘<div class="detail-frame">.*?<a.*?>(.*?)</a>‘, html, re.DOTALL)
17     imgs = re.findall(‘img src="(.*?)"‘, html, re.DOTALL)[1:]
18     for value in zip(titles, imgs):
19         title, img = value
20         with open(‘pic/‘ + title + ‘.jpg‘, ‘wb‘) as f:
21             f.write(requests.get(img).content)
22
23
24 if __name__ == ‘__main__‘:
25     if os.path.exists(‘pic‘):
26         pass
27     else:
28         os.mkdir(‘pic‘)
29     spider()

3.爬取古诗文

 1 import requests
 2 import re
 3
 4
 5 def parse_page(url):
 6     headers = {
 7         ‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ‘
 8                       ‘(KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘
 9     }
10     response = requests.get(url, headers=headers)
11     text = response.text
12     # 获取古诗标题
13     titles = re.findall(r‘<div\sclass="cont">.*?<b>(.*?)</b>‘, text, re.DOTALL)
14     # 获取作者朝代
15     dynasties = re.findall(r‘<p\sclass="source">.*?<a.*?>(.*?)</a>‘, text, re.DOTALL)
16     # 获取作者姓名
17     authors = re.findall(r‘<p\sclass="source">.*?<a.*?><a.*?>(.*?)</a>‘, text, re.DOTALL)
18     # 获取古诗内容
19     content_tags = re.findall(r‘<div\sclass="contson" .*?>(.*?)</div>‘, text, re.DOTALL)
20     contents = []
21     for content in content_tags:
22         x = re.sub(r‘<.*?>‘, "", content)
23         contents.append(x.strip())
24     poems = []
25     for value in zip(titles, dynasties, authors, contents):
26         title, dynasty, author, content = value
27         poem = {
28             ‘title‘: title,
29             ‘dynasty‘: dynasty,
30             ‘author‘: author,
31             ‘content‘: content
32         }
33         poems.append(poem)
34     for poem in poems:
35         print(poem)
36         print(‘=‘ * 50)
37
38
39 def main():
40     url = ‘https://www.gushiwen.org/default_1.aspx‘
41     for x in range(1, 20):
42         url = ‘https://www.gushiwen.org/default_%s.aspx‘ % x
43         parse_page(url)
44
45
46 if __name__ == ‘__main__‘:
47     main()

4.爬取校花网图片

 1 import requests, re, os
 2
 3 # 文件夹名称
 4 FileName = ‘downloads‘
 5
 6
 7 # 保存图片
 8 def SaveImage(image, name="temp"):
 9     # 图片存放路径
10     fpath = os.path.join(FileName, name + ‘.jpg‘)
11     response = requests.get("http://www.xiaohuar.com/d/file/" + image).content
12     # 写入图片
13     with open(fpath, ‘wb+‘) as f:
14         f.write(response)
15
16
17 # 获取当前页图片Url集合
18 def GetImage(fanyeUr):
19     # 请求页面
20     page = requests.get(fanyeUr)
21     # 设置编码
22     page.encoding = ‘gbk‘
23     # 正则获取图片集合
24     imglist = re.findall(‘alt="(.*?)" src="/d/file/(.*?\.jpg)"‘, page.text)
25     # 循环保存图片
26     for name, url in imglist:
27         print(url, name)
28         SaveImage(url, name)
29
30
31 # 判断文件夹是否存在
32 if not os.path.exists(os.path.join(os.getcwd(), FileName)):
33     # 新建文件夹
34     os.mkdir(os.path.join(os.getcwd(), FileName))
35
36 # 请求第一页
37 fanyeUr = ‘http://www.xiaohuar.com/list-1-0.html‘
38 # 循环翻页
39 for faye in range(1, 5):
40     # 获取翻页Url
41     GetImage(fanyeUr)
42     fanyeUr = ‘http://www.xiaohuar.com/list-1-%s.html‘ % faye

原文地址:https://www.cnblogs.com/min-R/p/10506752.html

时间: 2024-10-14 17:49:22

爬虫入门-5-1.正则表达式在爬虫中的应用的相关文章

Python爬虫入门七之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我

转 Python爬虫入门七之正则表达式

静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了. 正则表达式的大致匹配过程是:1.依次拿出表达式和文本中的字符比较,2.如果每一个

[转载]Python爬虫入门七之正则表达式

转自:http://cuiqingcai.com/977.html 在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Pyt

爬虫入门 手写一个Java爬虫

本文内容 涞源于  罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的?  2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做什么的?  他的主要工作就是 跟据指定的url地址 去发送请求,获得响应, 然后解析响应 , 一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL路径, 然后继续访问,继续解析;继续查找需要的数据和继续解析出新的URL路径  . 这就是网络爬虫主要干的工作.  下面是流程图: 通过上面的流程图

Python爬虫入门之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我

python网络爬虫入门

python网络爬虫入门(一) 网络爬虫的定义 1.网络蜘蛛.网络机器人,抓取网络数据的程序. 2.其实就是用Python(其他语言也可以这里介绍python)程序模仿人点击浏览器并访问网站,而且模仿的越逼真越好. 对比几种语言 1.Python :请求模块.解析模块丰富成熟,强大的Scrapy网络爬虫框架 2.PHP :对多线程.异步支持不太好 3.JAVA:代码笨重,代码量大 4.C/C++:虽然效率高,但是代码成型慢 爬取数据的一般步骤 1.确定需要爬取的URL地址 2.由请求模块向URL

python 爬虫入门之正则表达式 一

python  正则表达式知识点 正则 常用符号 . : 匹配任意字符,换行符除外 * : 匹配前一个字符 0 次或者无限次 ? : 匹配前一个字符 0次或者1次 .* : 贪心算法 .*? :非贪心算法 (): 括号内的数据作为结果返回 正则常用方法: findall: 匹配所有符合规律的内容,返回包含结果的列表 Search: 匹配并提取第一个符合规律的内容,返回一个正则表达式对象 Sub: 替换符合规律的内容,返回替换后的值 正则表达式的基本应用 ,使用正则表达式过滤一个简单的test文件

Python爬虫入门六之Cookie的使用

大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了. 在此之前呢,我们必须先介绍一个opener的概念. 1.Opener 当你获取一个

(原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻

发现科大网页的源码中还有文章的点击率,何不做一个文章点击率的降序排行.简单,前面入门(1)基本已经完成我们所要的功能了,本篇我们仅仅需要添加:一个通过正则获取文章点击率的数字:再加一个根据该数字的插入排序.ok,大功告成! 简单说一下本文插入排序的第一个循环,找到列表中最大的数,放到列表 0 的位置做观察哨. 上代码: # -*- coding: utf-8 -*- # 程序:爬取点击排名前十的科大热点新闻 # 版本:0.1 # 时间:2014.06.30 # 语言:python 2.7 #--

Python爬虫入门一之综述

首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫,我们要学习的共有以下几点: Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy Python爬虫更高级的功能 1.Python基础学习 首先,我们要用Python写爬虫,肯定要了解Python的基础吧,万丈高楼平地起,