网页爬虫(Python)

8 篇文章 0 订阅
4 篇文章 0 订阅

1. 有些网址后面有spm值,比如 http://bendi.koubei.com/shenzhen/list--page-1?spm=5026.1000614.1000245.2.3jN3A1,spm是淘宝统计反向链接用的,便于统计流量,定位来源,这个网址与 http://bendi.koubei.com/shenzhen/list--page-1打开的是同一个网页。

2.去掉所有HTML标签,把你需要提取信息的那行HTML用这个正则表达式把非HTML标签的内容提取出来

str = '<dd title="深南中路1093号中信广场1002号铺">深南中路1093号中信广场1002号铺 </dd><span>朋友聚会 </span><span>商业洽谈</span>'
p = re.compile('<[^>]+>')
print p.sub("",str)
输出为:深南中路1093号中信广场1002号铺 朋友聚会 商业洽谈

3.爬取局部刷新的网页内容

局部刷新采用Ajax技术,在网页上点击按钮或者点击选框获取更多信息时网址并没有改变,这时需要找到为局部刷新提供内容的网址才能获取到这部分信息,即搞清楚按下那个链接的时候,是往什么地方发送请求,发送的参数格式是什么样的,然后发送一个相同的请求,这样子就能把动态增加的那一部分给拿回来了。可以通过在Chrome的“审查元素”功能查看局部刷新时所发送请求的地址、参数格式。以在口碑网查看某个商户的全部用户点评信息为例:网址为http://detail.koubei.com/store/detail--id-479175e77f0c498684d793e9ccdc974c
在Chrome中打开,右键点击“审查元素” ==> Network ==> XHR(XML Http Response,Ajax编程技术,异步请求信息),下列图片说明了这个获得发送请求网址的过程。
首先在网友点评下的选框从“精华”切换到“全部”,观察到审查栏中新增了place_review_list_ajax.htm这一行,说明这是发送该请求的信息:

然后点击这行信息查看Header信息,Request URL为发送请求的地址,Form Data为表单提交的参数格式,点击view source可获得在网址中显示的格式


最后将参数格式添加到请求地址的后面,就可以获得完整的请求链接


该网址打开的是局部刷新动态增加的内容,只要修改相应的参数值即可爬取到所有内容。

4. 获取指定标签中的链接
例如想获取<a>标签中的链接href的值,则可通过如下语句获得

def start_a(self,attrs):
        links = [v for k,v in attrs if k == "href"]
5. urllib2.HTTPError: HTTP Error 403: Forbidden 错误
出现这个错误是由于网站禁止爬虫,可以在请求时加上头信息,伪装成浏览器访问。

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
req = urllib2.Request(url=shopurl,headers=headers)
page = urllib2.urlopen(req,timeout=10)
html = page.read()
page.close()
#或者 没试过
#opener = urllib2.build_opener()
#feeddata = opener.open(request).read()
6.正则表达式匹配功能,search和findall用法

reg = '<span\s*class="Color7">.*</span>'
content = re.search(reg,html).group()
reg = '<div class="photo"(.*\s*){2}<span>'
content = re.findall(reg,html,re.I)
for item in content:
        ...do something...
7.打印异常信息
try:
	req = urllib2.Request(url)
	page = urllib2.urlopen(req,timeout=10)
	html = page.read()
	page.close()
except:
	print sys.exc_info()[0],sys.exc_info()[1]   #转换成string类型,error=str(sys.exc_info()[1])
	print 'sleeeeeeeeeeeeeeeeeeeeeeeeeep'
	time.sleep(10)
else:
	...do something...
8. 先将网页下载存储到本地再进行内容提取,避免内容提取错误而需重新爬取,耗费时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值