.正则表达式
D \w \s \B $
如果要找一个邮箱,那就用正则匹配
把所有的邮箱都删掉
规则
==单字符==
**: 除换行以外所有的字符
[] : [aoe] [a-w] a到w之间的任意一个
\d : 数字[0-9]
\D : 非数字
\w : 数字字母、下划线、中文
\W : 非\w
\s : 所有的空白字符
\S : 非空白**
==数量修饰==
*** 任意多次 >=0次
+ 至少一次
? 可以有可以无,0次或者1次
{m} 固定m次
{m,} 至少m次
{m,n} m-n次**
==边界:==
**\b \B
$ : 以**结尾
^ : 以** 开头**
分组:
**()分组 视为一个功能
() 子模式\组模式 \1 \2**
贪婪模式
**贪婪.*? 非贪婪.+? 可以取消贪婪**
re.I:忽略大小
re.M:多行匹配
re.S:单行匹配
match(只从最开始找)/search(从任意位置找)/findall
re.sub(正则表达式,替换内容,字符串)
import urllib.request
import urllib.parse
import re
#这个函数是构建请求对象
def handle_request(url,page=None):
if page != None:
url = url+str(page)+'.html'
#headers这个是模拟浏览器的请求头,伪装成谷歌浏览器,因为如果你是个爬虫,是会被查出来的
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
#输出一下url看看构建的请求对象是否正确
print(url)
request = urllib.request.Request(url=url,headers=headers)
return request
def get_text(a_href):
#shiyong函数构建请求对象
request = handle_request(a_href)
print("这是gettext",a_href)
#发送请求,获取响应
#content = urllib.request.urlopen(request).read().decode('utf-8')
content = urllib.request.urlopen(request).read().decode('gb18030','ignore')
pattern_ct = re.compile(r'<div class="article-text">(.*?)</div>',re.S)
lt = pattern_ct.findall(content)
print("这是gettext",lt)
return lt[0]
def parse_content(content):
#引用re(正则库),构建一种模式--自己要爬取的内容的h5结构
pattern_title = re.compile(r' <span class="article-title"><a target="_blank" href="(/detail59/\d+\.html)">(.*?)</a></span>')
pattern_content = re.compile(r'<div class="summary-text">(.*?)</div>',re.S)
lt_title = pattern_title.findall(content)
lt_content = pattern_content.findall(content)
#输出一下,再次检测一下获取的标题和内容是否正确
print("lt_title is :",lt_title)
print("lt_content is :",lt_content)
#对于每一个href_title,都有两部分,0下标是<a>的相对路径的,1下标的是标题内容
for href_title in lt_title:
#获取内容的连接
a_href = 'http://xiaohua.zol.com.cn'+href_title[0]
#获取内容标题
title = href_title[1]
#向a_href发送请求,响应
text=get_text(a_href)
#写入到HTML文件中
string = '<h1>%s</h1><p>%s</P>' % (title,text)
print("string is",string)
with open('xiaohua.html','w') as fp:
fp.write(string)
def main():
#这是要爬取的网页
url = 'http://xiaohua.zol.com.cn/jianduan/'
start_page = int(input("输入起始页"))
end_page = int(input("输入结束页"))
#start_page = 1
#end_page = 1
#遍历每一页进行爬取
for page in range(start_page,end_page+1):
#拿到子方法构建好的请求对象request
request = handle_request(url,page)
#拿到获取的网页content
content = urllib.request.urlopen(request).read().decode('gb18030','ignore')
#解析,拿出想要的部分
parse_content(content)
if __name__ == '__main__':
main()