Python数据挖掘学习笔记(10)爬取CSDN资讯页的所有新闻

需求:爬取CSDN资讯页http://blog.csdn.net/nav/news的所有新闻,每个文章内容单独生成一个本地网页存到本地中。
难点:需要进行浏览器伪装、循环爬各文章。
思路:先爬首页,然后通过正则筛选出所有文章url,然后通过循环分别爬取这些url到本地。

实现:

          首先观察该网页的源代码:

注意到每个新闻页被<h2>标签所包围,编写代码:

import urllib.request
import re

#浏览器伪装
headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400")
opener=urllib.request.build_opener() #添加为全局,很重要
opener.addheaders=[headers]
data1=opener.open("http://blog.csdn.net/nav/news").read()
data2=data1.decode("utf-8")
pat='<h2>\n.*?<a href="(.*?)"'
allurl=re.compile(pat).findall(data2)
print(len(allurl))
for i in range(0,len(allurl)):
    try:
        print("第"+str(i)+"次爬取")
        thisurl=allurl[i]
        print(thisurl)
        file="F:/csdnnews/"+str(i)+".html"
        urllib.request.urlretrieve(thisurl,file)
        print("-------成功-------")
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)

感谢韦玮老师的指导

猜你喜欢

转载自blog.csdn.net/Smart3S/article/details/82492413