Python爬虫爬取糗百
1、构造请求,查看爬取的URL,因为糗百的内容有可能有多页,并且内容很多,所以在爬取的时候选择只爬取文正的ID以及内容
2、构造爬取过程中的正则表达式,筛选出所需内容(根据网页源代码)
3、对爬取内容进行输出展示
#!/usr/bin/env python
#coding=utf-8
import urllib2
import urllib
import re
import time
from urllib2 import HTTPError
def getdata(url):
user_agent = 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/56.0.2924.87 Safari/537.36'
headers= {'User-Agent':user_agent}
request = urllib2.Request(url=url,headers=headers)
response = urllib2.urlopen(request)
content = response.read()
pattern = re.compile('<ahref="/article/(\d+)"\s+target.*?contentHerf.*?<span>(.*?)</span>',re.S)
result = re.findall(pattern,content)
returnresult
if __name__ == '__main__':
start_page = 1
end_page= 35
fori inrange(start_page,end_page):
url = 'http://www.qiushibaike.com/8hr/page/'+str(i)+'/?s=4969805'
res= getdata(url)
ifres == None:
print'no result return'
else:
forline inres:
print line[0],line[1].replace('<br/>','')
time.sleep(1)
查看网页的源代码如下
<a href="/article/118806702"target="_blank" class='contentHerf' >
<div class="content">
<span>巨招财的石头,左下角发发发发</span>
</div>
</a>
根据文本内容构造了如下的正则
re.compile('<ahref="/article/(\d+)"\s+target.*?contentHerf.*?<span>(.*?)</span>',re.S)
re.S表示的是在普通的正则中(.)这个符号不能代表换行符,利用这个模式之后,换行符同样能用(.)来表示单个字符(.符号用括号括起来,防止看不清楚)
之后就可以对文本进行输出处理了。