组成部分
- url管理器
管理要爬取和将要爬取的url
关键在于唯一性,存储的时候,不然会很浪费效率
比如set()有唯一性的优点
- html下载器
下载网页内容
基本语法:
from urllib import request
reponse = request.urlopen(url)#开始爬取
response.read()#网页内容
- html解析器
解析下载好的网页内容,提取要的内容
常用module-BeautifulSoup
基本语法:
from bs4 import BeautifulSoup
import urllib.parse
content = find_all('a',href='sss')#找到所有链接为sss的a标签
- 存储器
存储爬取好的内容
关键在于与数据库的链接
关于urllib的学习<p>
- urllib模拟浏览器访问网址
- 携带User-Agent头(里面包含浏览器、电脑的信息,添加这个头以模拟更真实的访问)
from urllib.request import Request
#注意Request的引入
req = request.Request(url)
req.add_header(key,value)#添加信息,这只是添加一个头部,如果有很多个要写多个add_header
response = request.urlopen(req)#此时传进去的就不是url而是req了
- POST请求,比如说登陆的时候,得提交用户名和密码
from urllib import parse
#注意parse的引入
#使用urlencode生成post数据
postData = parse.urlencode([
(key1,val1),
(key2,val2)
])
request.urlopen(req,data=postData.encode('utf-8'))#在urlopen里面data参数携带要发送的数据,注意要编码发送
- 得到请求状态
response.status
- 得到服务器的类型
response.reason
关于Beautiful Soup的使用<p>
- 默认使用unicode来接受一个文档,并且以utf-8返回,所以用BeautifulSoup的时候不用去解码
- 引入
from bs4 import BeautifulSoup
,as
起别名->from bs4 import BeautifulSoup as bs
然后就可以用bs了,一般情况不要起别名,会很混乱的,别人也不方便看 - beautifulsoup解析器,就是bs以何种方式来解析目标对象,一般用python自带的
html.parser
<p>
soup = BeautifulSoup(html_doc,"html.parser")
- 简单的方法
soup.标签名 #获取某个标签
soup.find('标签名')
soup.find(id="")根据id来找
soup.find(id="sidebar").string,获取这个id标签内的内容,class不可以,class_可以,class是python关键字
soup.find_all('标签名‘)
soup.find("p",{“class”:"story"})根据属性来找
#如果根据类名来找一组元素的话,要用 find_all并且要指定元素名
#获取标签内的文本内容,string属性或者get_text()方法
get_text()-> 获得标签中包含的文本内容,包括孙子的文本内容
.string->如果标签只有一个NavigableString类型子节点或者仅有一个子节点,那么可以用.string得到子节点,如果有多个子节点就不可以