Python学习之爬虫06-CSDN博客文章爬取
概述:
练习总结。(一边爬着CSDN,一边写着CSDN的博客会不会被打…)
import urllib.request
import re
url="https://blog.csdn.net/"
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers] # 添加报头,伪装成浏览器访问
# 将报头安装为全局属性,这样的话,使用urllib.urlopen也能携带伪装的报头
urllib.request.install_opener(opener)
# 开始访问主页
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
paturl='''data-track-click='{"mod":"popu_459","con":",([\s\S]* or [\w\W]* or [\d\D]*?)#commentBox'''
all_link=re.compile(paturl).findall(data)
print(all_link)
注:这时一个奇迹,我第一次这样匹配可以爬下来,但是之后就不行了,需要转换正则…这也是反爬中的一种吗?表示很晕…
查看网页源码可知:正则没错,但是通过爬虫爬取的HTML数据和网页源码不同…这就很醉了。
算了后续再来研究…
import urllib.request
import re
url="https://blog.csdn.net/"
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers] # 添加报头,伪装成浏览器访问
# 将报头安装为全局属性,这样的话,使用urllib.urlopen也能携带伪装的报头
urllib.request.install_opener(opener)
# 开始访问主页
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pattitle='target="_blank">(.*?)</a></h3>'
paturl2='<h3 class="company_name"><a href="(.*?)"'
all_title=re.compile(pattitle).findall(data)
all_link2=re.compile(paturl2).findall(data)
# print(data)
# print(len(all_link2)) # 16 第一个连接不能要 因为匹配出来的链接不是博文,而是CSDN宣传链接
# print(len(all_title)) # 前3个连接不能要,匹配出的内容不符合
for i in range(1,len(all_link2)):
thislink=all_link2[i]
this_title=all_title[i+2]
localpath="G:\\Python_Test\\urllib_test\\"+str(this_title)+".html"
urllib.request.urlretrieve(thislink,filename=localpath)
print("当前文章(第"+str(i)+"篇)爬取成功!")
感觉中间有一篇没有成功…