python爬虫:抓取知乎收藏夹的问答

前言

       本篇使用pythonBeautifulSoup 实现爬虫,抓取知乎收藏夹的问题与神回复,用于做自然语言处理研究。开始接触python爬虫,是从一段代码分享《获取城市的PM2.5浓度和排名(含单线程和多线程)》受启发。

城市PM2.5爬虫

#!/usr/bin/env python
# by keyven
# PM25.py

import urllib2
from bs4 import BeautifulSoup

def getPm25(cityname):
	site = 'http://www.pm25.com/' + cityname + '.html'
	html = urllib2.urlopen(site)
	soup = BeautifulSoup(html)

	city = soup.find(class_ = 'bi_loaction_city')   # 城市名称
	aqi = soup.find("a",{"class","bi_aqiarea_num"})  # AQI指数
	quality = soup.select(".bi_aqiarea_right span")  # 空气质量等级
	result = soup.find("div",class_ ='bi_aqiarea_bottom')   # 空气质量描述
	s = city.text + '\nAQI:' + aqi.text + '\nAir Quality:' + ' ' + result.text
	return s
#!/usr/bin/env python
# by keyven
# main.py

from PM25 import getPm25
s = getPm25('xianggang')
print s

       效果图:

爬取知乎神回复

       我们从这个网址(http://www.zhihu.com/collection/27109279?page=1)来开始爬,打开网页,仔细观察源码,可以发现一些模块规律:问题答案作为两个子模块放在同一个大模块里面。接下来开始写代码:

#!/usr/bin/env python
# by keyven
# main.py

import re
import urllib2
from bs4 import BeautifulSoup

for p in range(1,5):
	url = "http://www.zhihu.com/collection/27109279?page=" + str(p)
	page = urllib2.urlopen(url)
	soup = BeautifulSoup(page)

	allp = soup.findAll(class_ = 'zm-item')
	for each in allp:
		answer = each.findNext(class_ = 'zh-summary summary clearfix')
		if len(answer.text) > 100:
			continue    # 答案太长了,有可能出现“显示全部”情况,直接跳过
		problem = each.findNext(class_ = 'zm-item-title')
		print problem.text,
		print answer.text

       效果图:

       我们观察运行效果,发现有些小bug,观察原网页:

       原来是同一个问题出现两个一模一样的答案所导致,这时我们可以做一下业务性处理,在同一个page 中加入一个set 来判断答案是否出现过2 次。

Reference

获取城市的PM2.5浓度和排名(含单线程和多线程)

Python实现爬取知乎神回复

如何正确的吐槽

转载于:https://my.oschina.net/keyven/blog/683103

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值