Python3.4简单爬虫实现之抓取糗事百科段子

网上的python教程大都是2.X版本的,python2.X和python3.X相比较改动比较大,好多库的用法不太一样,我安装的是3.4.1,就用3.4.1实现一下网页内容抓取


首先是库,2.7版本的urllib2库已经没有了,我导入的是:

import urllib.request
import re


首先是取得url,直接打开糗事百科直接复制网址

url='http://www.qiushibaike.com/hot/'


然后设置headers,伪装成浏览器进行访问,有的网站会有屏蔽措施,设置过headers可以绕过屏蔽

user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}


然后进行请求,这里3.4和2.7有点不一样,注意用法

request=urllib.request.Request(url=url,headers=headers)


然后获取响应结果,注意用法

response=urllib.request.urlopen(request)


此时就抓去了整个网页源代码,可以打印一下看看

content=response.read().decode('utf-8')

print(content)


如何抓取想要的内容呢?这里需要正则表达式去匹配

先看看部分源码的内容,如下:

“懒惰是可以战胜饥饿的 ”

“但却输给了尿”
1702 好笑 · 26 评论


这是一条内容,可以看出,从

结束

然后就写正则匹配

pattern=re.compile('.*?

(.*?)

.*?(.*?).*?.*?.*?')


再然后就可以获取内容了

items=re.findall(pattern,str(content))


由于控制台不能输出图片,就把带图片的过滤掉吧

for item in items:
 haveImg=re.search('img',item[2])
 if not haveImg:
  print(item[0]),print(item[1])


然后运行即可


附上源码图片以及运行结果:


Python3.4简单爬虫实现之抓取糗事百科段子_第1张图片

Python3.4简单爬虫实现之抓取糗事百科段子_第2张图片




代码估计大家都能看懂,正则表达式可能新手不太理解


我稍微说一下

.*?代表一个固定搭配,指尽可能短的匹配

(.*?)代表一个分组,是我们抓取的内容

re.S说明可以匹配到换行,如果没有re.S就啥也取不到



这个代码是初稿,比较粗糙,有兴趣的可以把它改造成面向对象的模式




此处有贴出糗事百科用户id名称,非恶意,望见谅







你可能感兴趣的:(Python)