python爬取网页(设置headers2)
来源:互联网 发布:店铺如何关闭淘宝客 编辑:程序博客网 时间:2024/05/16 02:42
今天用python爬取糗事百科的笑料时,发现用前面学的方法竟然不好用了.........
就是这样:
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
html = getHtml("http://www.qiushibaike.com/hot/")
运行到这一步就会出错,也就是说 urllib.urlopen(url)不能读取这个网址,上网一查,才发现还有什么动态网页和静态网页之分(好吧,表示以前都没听说过,计算机小白一枚。。。),前边学习的方法只适用于一般的静态网页。对于这种情况,我们需要设置headers属性。
#############################
在这之前先补充一个知识点:构造request属性
就是在上面的urlopen()中的参数可以传入一个request请求,它是Request类的一个实例,构造是需要加入URL,data等,比如上面程序可以改写为:
def getHtml(url):
request = urllib2.Request(url)
page = urllib.urlopen(request)
html = page.read()
return html
这个写法运行结果和前边是完全一样的,以后推荐这种写法,因为后边需要时还要向request对象中传入其它参数。
##################################
一、下面看一下追加的headers的方法。
import urllib
import urllib2
import re
url = "http://www.qiushibaike.com/hot/"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'#这两个是传入headers中的参数,具体什么意思我也不太懂
headers = { 'User-Agent' : user_agent } #设置headers
request = urllib2.Request(url,headers=headers)#request的构造
page = urllib2.urlopen(request)
html = page.read()
reg = '<div class="content">[\n]*<span>(.*?)</span>'
page_reg = re.compile(reg)
artlist = re.findall(page_reg,html)
for art in artlist:
print art
二、另一种设置headers的方法是:
url = "http://www.qiushibaike.com/hot/"
request = urllib2.Request(url)
request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)') #追加header
page = urllib2.urlopen(request)
html = page.read()
下面一样。
最后附上整个代码:
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
url = "http://www.qiushibaike.com/hot/"
request = urllib2.Request(url,headers=headers)
page = urllib2.urlopen(request)
html = page.read()
reg = '<div class="content">[\n]*<span>(.*?)</span>[\n]*</div>[\n]</a>[\n]*'
reg += '<div class="thumb">[\n]*<a href="/article/.*?" target="_blank">[\n]'
reg += '<img src="(.*\.jpg)" alt=".*?" />[\n]</a>[\n]*</div>[\n]*'
reg += '<div class="stats">[\n]<span class="stats-vote"><i class="number">(.*?)</i> .*?</span>[\n]'
reg += '<span class="stats-comments">[\n]*<span class="dash">.*?</span>[\n]'
reg += '<a href="/article/.*?" data-share="/article/.*?" id="c-.*?" class="qiushi_comments" target="_blank">'
reg += '[\n]<i class="number">(.*?)</i> .*?[\n]</a>'
page_reg = re.compile(reg)
artlist = re.findall(page_reg,html)
flag = True
while flag:
for art in artlist:
input_cha = raw_input() #点回车继续
if input_cha == "Q": #点Q键退出
flag = False
break
print art[0]
print u"点赞:%s\n评论:%s" %(art[2],art[3])
这里大家可能会发现上次用了urllib,这次怎么用了urllib2,这两个有什么区别吗?
其实它们的区别是:urllib只能根据url爬取,不能设置headers信息,但可以对url进行编码。而urllib2可以构造request,设置headers信息。这些知识以前没接触过,所以难免有什么遗漏不足之处,随着学习慢慢修改完善。
- python爬取网页(设置headers2)
- python爬取网页
- Python 网页爬取
- python爬取网页(简易)
- python 爬取网页正文
- python 多线程网页爬取
- python爬取网页信息
- python爬取网页图片
- 学习python爬取网页
- Python爬取简单网页
- python爬取网页内容
- python爬取网页图片
- Python爬取网页数据
- Python爬取网页图片
- Python爬取网页图片
- python爬取HTML网页
- Python-爬取网页信息
- python爬取网页信息
- intellij idea搭建python环境,运行tensorFlow样例程序
- C++中引用与指针的区别(详细介绍)
- 软件测试知识点大全
- Ubuntu 16.04安装搜狗输入法
- Oil Deposits (深搜(水))
- python爬取网页(设置headers2)
- 1.7 爬取汽车之家实战
- 从spring jpa getone 说到 Hibernate中的动态代理Javassist
- [BZOJ1044][HAOI2008]木棍分割(二分+贪心+dp)
- SharedPreferences多进程解决方案
- python:libsvm-3.22
- android system traceview 和 hierarchy view
- 如何打印日志
- Linux之字符截取命令