python的web抓取技术


1.利用webbrowser模块。

   利用webbrowser模块的open()函数可以启动一个新的浏览器,打开指定URL。

import webbrowser
webbrowser.open('http://baidu.com')

2.用requests模块从web下载文件

   requests模块可以帮助我们从web上下载文件,当然由于requests不是自带的模块,所以在使用前必须用

pip install requests

安装requests的模块。

import requests
result=requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
result.raise_for_status()


这样会返回一个Response对象。下载好的文件页面会保存在result.text里面;result还有一个status_code属性,可以检查是否等于requests.codes.ok,检查下载是否成功。


或者是在Response对象上调用raise_for_status()方法。如果下载失败,将抛出异常,否则就什么都不做。


3.将下载好的web页面保存在硬盘上。

 
可以使用传统的open() write()方法将web页面保存在硬盘上的一个文件,但是必须要以“写二进制”的模式即‘wb’模式打开文件,即使写入的文件是一个文本文件。

为了将web页面写入一个文件,可以使用for循环和Response对象的iter_content()方法

import requests
result=requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
result.raise_for_status()
File = open('pg.txt','wb')
for chunk in result.iter_content(100000):
   File.write(chunk)
File.close()

这样可以制定一段包含多少字节,一段一段地写入新文件。


4.用beautifulsoup解析页面

beautifulsoup的任务就是解析html代码中的各种标签。

<span style="font-size:18px;">import bs4,requests
res=requests.get('http://baidu.com')
res.raise_for_status()
Soup=bs4.BeautifulSoup(res.text,'lxml')
</span>

这样Soup就成为一个BeautifulSoup对象,而且是以lxml的方式解析的。

解析完要做的工作就是用select()方法寻找元素。

以下显示了常用的一些css选择器的例子:

传递给select()方法的选择器:                                                                将匹配:

soup.select('div')                                                                                        所有名为<div>的元素

soup.select('#name')                                                                                带有id属性为name的元素

soup.select('.notice')                                                                                 所有使用CSS class属性名为notice的元素

soup.select('div span')                                                                              所有在<div>元素之内的<span>元素

soup.select('div > span')                                                                          所有直接在div元素之内的<span>元素,中间没有其他元素

soup.select('input[name]')                                                                       所有名为<input>并有一个name属性其值无所谓的元素

soup.select('input[name="hello"]')                                                         所有名为<input>并有一个name属性且值为hello的元素

 

select()函数将会返回一个标签的集合,这是BeautifulSoup表示一个HTML元素的方式。针对每一次的成功匹配都有一个标签对象与之对应。

标签值有attrs属性,将该标签的所有html属性作为一个字典。

标签对象的get()方法可以让我们很容易从元素中获取属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值