网络爬虫 - 爬取嗅事百科
爬取过程分三大步:
一,请求,获取网页源码
url为:url =' https :
//www.qiushibaike.com/8hr/page/'+ str(page)先构造请求,这里要加入UA(用户代理)字段,模仿浏览器请求,躲开反爬虫策略,代码如下:
def get_html(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'}
req = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
return html
二,|网页解析源码
我们要的电子杂志的英文嗅事百科里的段子提取出作者状语从句:段子内容,可以打开浏览器,快捷键:F12源码查看
我们观察会发现 <span>和</span>
之间,作者同理就在<h2></h2>之中中
之中,因此,正则表达式可以这样写
'<h2>(.*?)</h2>.*?<div class="content.*?<span>(.*?)</span>'
获取名字和内容可以通过索引,打印出来我们发现里面有很多\ n,所以这里采用最简单的办法就是把所有的换行符都替换掉,然后在后面重新加可以控制的换行符:
name = str(team[0]).replace('\n', '')+':\n'
text = str(team[1]).replace('\n', n '
三,内容保存
保存内容的时候,我们会发现里面有很多
换行标签,但在文档看起来很不舒服,所以就要想办法吧他替换掉,这是sub()
方法:
全部代码如下:
import urllib.request
import urllib.parse
import re
import time
def get_html(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'}
req = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
return html
def analysis_content(html):
a = re.compile('<h2>(.*?)</h2>.*?<div class="content.*?<span>(.*?)</span>',re.S)
content = a.findall(html)
for team in content:
name = str(team[0]).replace('\n', '')+':\n'
text = str(team[1]).replace('\n', '')+'\n\n'
if '<br/>' in text:
new_i = re.sub('<br/>','\n',text)
else:
new_i = text
with open('XiuShiBaiKe.txt','a',encoding='utf-8') as f:
f.write(name+new_i)
print(name+new_i)
def main(page):
url = 'https://www.qiushibaike.com/8hr/page/'+str(page)
print(url)
html = get_html(url)
analysis_content(html)
if __name__ == '__main__':
for p in range(1,14):
page = p
print(page)
main(page)
time.sleep(1)
初自学爬虫,请多多指教!