1.准备请求URL地址。
URL= ‘https://www.qiushibaike.com/hot/page/1’
#如果不加请求头,默认情况下user-Agent是python开头的,对方会采取反爬虫措施。
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0' }
2.构建请求对象
req=request.Request(url=url,headers=headers)
3.发送请求,获取源代码
response = request.urlopen(req) # 发送请求,接收响应
4.读取返回的数据,转换为字符串类型
HTML= response.read().decode('utf-8', 'ignore')
5.准备正则
pattern= re.compile(r'<h2>(.*?)</h2>.*?<div class="article".*?>(.*?)</div>.*?<div class="content.*?span>(.*?)</span>,re.S")
6.使用findall()函数 查找所有用户
res = re.findall(pattern,html)
for r in res:
author = r[0].strip('\n')
content =r[2].strip('\n') # 去除两边的空格
br_pat=re.compile( r'<br/><br/>|<br/>|<br>',re.S)
# 1.正则表达式 2.替换后的字符 3.要进行替换的字符串 4.替换的次数。
content =re.sub(br_pat; '\n', content)
print(author)
print(content)
# 下一页标签,# 找到ul标签包裹的所有标签。
next_pat = re.compile(r'<ul class="pagination".*?</ul>', re.S)
rs =re.search(next_pat, html)
# 获取ul包裹的标签代码
ul_html =rs.group()
# 再次使用正则从ul包裹的标签页代码中提取所有的链接
link_pat = re.compile(r'<li.*?a href="(.*?)"',re.S>)
a_links = re.findall(link_pat,ul_html)
# 取出下一页链接
next_link = a_links[-1]
# 判断链接地址是否包含page字符,若包含则有下一页,若不包含则没有下一页
if 'page' in next _link:
print('有下一页,下一页的地址为:{}.format(next_link)')
# 拼接一个完整的url地址
url = 'https://www.qiushibaike.com'+next_link
else:
print(“没有下一页,数据爬去完毕!”)
break