爬取CSDN博客首页显示的所有文章,并将其网页链接下载到本地

难点-浏览器伪装,添加报头,获得CSDN首页数据;
正则匹配,将需要的网址进行匹配;
正则匹配完成的网页链接,使用urlretrieve爬取并下载到本地html文件
通过将opener添加为全局对象,可以直接使用urlopen来直接爬取对应网页而不产生403错误(不知道为啥,我直接爬取CSDN博客主页也根本不会产生403错误…)
总之,浏览器伪装技术就是伪装成浏览器的代理,对网站进行访问和爬取,手段是通过添加/修改报头信息类面的user-agent的名字

:爬取的部分网页打不开,或者直接回到首页,关于是使用http还是https进行正则匹配的问题和作为blogurl的问题,还有待解决,不急

'''爬取CSDN博客首页显示的所有文章,并download到本地'''
import urllib.request
import urllib.error
import re
def getHtml(url):
    # 利用浏览器伪装技术 获取首页数据
    headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36")
    # 添加报头信息
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    # 将opener对象添加为全局
    urllib.request.install_opener(opener)
    # data = opener.open(url).read().decode("utf-8","ignore")  # 未添加opener为全局时,如此使用
    data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
    print(data)
    return data
def writeHtml(fileurl,urllist):
    '''将正则匹配的网址爬取并写入本地--urlretrieve
    如果不使用urlretrieve,则可以利用urlopen将每个网页的内容提取'''
    for i in range(len(urllist)):
        try:
            print("第" + str(i) + "次爬取")
            # urlretrieve 爬取并将网址写入本地文件
            urllib.request.urlretrieve(urllist[i],fileurl+str(i)+".html")
            print("-----爬取成功")
        except urllib.error.URLError as e:
            if hasattr(e,'code'):
                print(e.code);
            if hasattr(e,'reason'):
                print(e.reason)

fileurl = "F:/主修课程/数据挖掘与数据分析爬虫/爬虫/Project_week2/project_week2/csdn/"
blogurl = "https://blog.csdn.net/"
# blogurl = "http://news.sina.com.cn/"
data = getHtml(blogurl)
# 正则匹配
pat = 'href="(https://blog.csdn.net/.*?)"'
urllist = re.compile(pat).findall(data)
writeHtml(fileurl,urllist)

# # 原则上要出现403 可是我没有....
# data = urllib.request.urlopen(blogurl).read().decode("utf-8")
# print(data)



























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值