使用Python网络爬虫收集51cto频道所有文章题目以及配置

优采云 发布时间: 2021-08-20 22:39

  使用Python网络爬虫收集51cto频道所有文章题目以及配置

  项目实现:使用Python网络爬虫采集51cto频道的所有文章话题和相关链接,通过修改程序中的相关参数即可实现所有文章采集

  项目工具:Fiddler

  51cto、csdn等都是被网络爬虫禁止访问的,所以先让Python爬虫伪装成浏览器,然后以模拟浏览器的形式访问51cto等网站。此处将使用 Fiddler 工具。 可以直接从Fiddler官网点击打开链接下载Fiddler,下载后直接打开安装即可。网络上有很多Fiddler相关的配置,这里就不详细介绍了。首先打开51cto首页,点击左上角“频道”-大数据,在页面底部看到“加载更多”选项,然后打开Fiddler,点击“加载更多”,Fiddler页面在这次如图:

  

  此时Fiddler界面中的Client就是我们用来访问51cto网站的真实浏览器的头部信息。该信息可用于使爬虫伪装成浏览器。在Python编程中,我们可以按照如下格式设置头信息:

  #模拟浏览器

headers = {"Accept": "*/*",

"Accept-Encoding": "utf-8, gb2312",

"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0",

"Connection": "keep-alive",

"referer": "51cto.com"

}

cjar = http.cookiejar.CookieJar()

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))

headall = []

for key, value in headers.items():

item = (key, value)

headall.append(item)

opener.addheaders = headall

urllib.request.install_opener(opener)

  如果我们使用同一个IP抓取同一个网站网页,很可能会被网站服务器拦截。为了避免IP被屏蔽,可以使用代理服务器点击打开链接,点击打开链接,在程序设计中,对于代理服务器的设置,我们采用如下形式:

  #创建代理服务器

def use_proxy(proxy_addr, url):

try:

proxy = urllib.request.ProxyHandler({'http': proxy_addr})

opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)

urllib.request.install_opener(opener)

data = urllib.request.urlopen(url).read().decode('utf-8')

return data

#异常处理机制

except urllib.error.URLError as e:

if hasattr(e, 'code'):

print(e.code)

if hasattr(e, 'reason'):

print(e.reason)

time.sleep(10)

except Exception as e:

print("exception-->"+str(e))

time.sleep(1)

  设置好模拟浏览器和代理服务器后,我们开始进入相关网页的主题爬取。

  通过Fiddler分析网页行为,实现文章的自动加载。在Fiddler获取浏览器头信息的界面中,Fiddler抓到了session信息,如图:

  

  点击session信息,可以看到session信息的header请求详情:

  

  复制 URL 并再次单击“加载更多”以获取另一个 URL。观察规律,发现

  (1)type_id为文章51cto通道的type id,type_size为文章每次加载的编号

  (2)page字段加1,callback=kjsonp "......"加1

  因此,我们可以构造出文章的URL地址进行抓取

  url = "http://other.51cto.com/php/get_channel_recommend_art_list.php?" \

"callback=jsonp" + str(contentid) + "&page=" + str(page) + \

"&type_id=" + typeid + "&type=recommend&page_size=" + str(pagesize)

  打开复制的网址,可以看到如下内容:

  

  分析内容,我们可以得到如下字段;

  "title":"BBC\uff1a\u6570\u636e\u5e26\u6765\u7684\u5f0a\u75c5\uff1f\u8fd1\u56e0\u6548\u5e94",

  "picname":"http:\/\/\/wyfs02\/M02\/8F\/4A\/wKiom1jaCFejo_GmAACiPt3NL7056.jpeg-wh_173x112-wm_-s_329470"p

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线