网页文章自动采集(使用Python网络爬虫收集51cto频道所有文章题目以及配置)

优采云 发布时间: 2021-09-29 08:07

  网页文章自动采集(使用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捕获到的会话信息如图:

  

  点击会话信息,可以看到会话信息的头部请求详情:

  

  复制 URL 并再次单击“加载更多”以获取另一个 URL。观察图案后,你会发现

  (1)type_id为51cto通道的文章类型id,type_size为每次加载文章的数量

  (2)页面字段加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)

  当我们打开复制的 URL 时,我们可以看到以下内容:

  

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

  "title":"BBC\uff1a\u5927\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_329475793>@k30,"

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线