定向爬取步骤:
1)爬取目的
2)设置网址过滤规则
3)设置内容采集规则
4)设置爬虫线程和爬虫数量
5)修正结果格式
6)进一步完善结果
核心内容是信息筛选:
1)正则表达式
2)XPath表达式
3)xslt筛选
加载最新的评论:
import urllib.request
import http.cookiejar
import re
#设置视频编号
vid = "1472528692"
#设置评论起始编码
comid = "6173403130078248384"
#构造出真实评论请求网址
url = "http://coral.qq.com/article/"+vid+"/comment?commentid="+comid+"&reqnum=20"
#设置头信息伪装成浏览器爬取
headers = {"Accept":"text/html,application/xhtml+html,application/xml;q=0.9,*/*;q=0.8","Accept-Encoding":"gb2312,utf-8","Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3","User-Agent":"Mozilla/5.0(Windows NT 601;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0","Connection":"keep-alive","referer":"qq.com"}
#设置cookie
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)
#建立一个自定义函数craw(vid,comid),实现自动爬取对应评论网页并返回爬取数据
def craw(vid,comid):
url = "http://coral.qq.com/article/"+vid+"/comment?commentid="+comid+"&reqnum=20"
#爬取该网页
data = urllib.request.urlopen(url).read().decode("utf-8")
return data
#分别构建筛选id,用户名,评论内容等信息的正则表达式
idpat = '"id":"(.*?)"'
userpat = '"nick":"(.*?)",'
conpat = '"content":"(.*?)",'
#第一层循环,代表爬取多少页,每一次外层循环爬取一页
for i in range(1,10):
print("-------------------------------")
print("第"+str(i)+"页评论内容")
data = craw(vid,comid)
#第二层循环,根据爬取的结果提取并处理每条评论的信息,一页20条评论
#通过循环将获取到的信息遍历出来
for j in range(0,20):
#分别根据正则表达式查找到所有id,用户名,评论内容等信息
idlist = re.compile(idpat,re.S).findall(data)
userlist = re.compile(userpat,re.S).findall(data)
conlist = re.compile(conpat,re.S).findall(data)
#输出对应信息,并对字符串进行unicode编码,从而正常显示
print("用户名是:"+eval('u"'+userlist[i]+'"'))
print("评论内容是:"+eval('u"'+conlist[i]+'"'))
print("\n")
#将comid改变为该页的最后一条评论id,实现不断自动加载
comid = idlist[19]