-
实例爬虫-分析目标
查看全部 -
开发爬虫的步骤
确定目标:要抓取哪部分数据
查看全部 -
实例测试代码
import re from bs4 import BeautifulSoup html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ soup=BeautifulSoup(html_doc,'html.parser') print('获取所有链接:') links=soup.find_all('a') for link in links: print(link.name,link['href'],link.get_text()) print('获取指定链接(获取Lacie链接):') # link_node=soup.find('a',id="link2") link_node=soup.find('a',href='http://example.com/lacie') print(link_node.name,link_node['href'],link_node.get_text()) print('输入正则模糊匹配出需要的内容:') link_node=soup.find('a',href=re.compile(r"ill")) #'r'表示正则中出现反斜线时,我们只需写一个反斜线,否则我们要写两个 print(link_node.name,link_node['href'],link_node.get_text()) print('输入p这个段落文字(指定class获取内容):') p_node=soup.find('p',class_="title") print(p_node.name,p_node.get_text())
查看全部 -
访问节点信息
查看全部 -
name:名称
attrs:属性
string:文字
bs模块非常强大的地方是:对于它的名称,属性和文字,都可传入一个正则表达式来匹配对应的内容
'class'后加了'_'的原因:python的关键字有class,bs为了避免冲突,加了一个'_'
查看全部 -
对应代码
创建了BeautifulSoup对象并加载好了DOM
查看全部 -
搜索 栗子
查看全部 -
Beautiful Soup语法
根据下载好的HTML网页字符串可创建一个BeautifulSoup对象,创建这个DOM对象的同时就会将整个文档字符串下载成一个DOM数
根据这个DOM数我们就可进行各种节点的搜索;搜索节点时,可按照节点名称或节点属性或节点文字进行搜索
(find_add()方法:会搜索出所有满足要求的节点;find()方法:只会搜索出第1个满足要求的节点;这两个参数是一模一样的)
得到一个节点以后,我们就可以访问节点的名称,属性,文字
查看全部 -
结构化解析
查看全部 -
4种解析器
正则表达式
html.parser模块:py自带
Beautiful Soup:第三方插件 它可使用html.parser作为它的解析器,也可使用lxml作为它的解析器,相对来说比较强大
lxml:第三方插件 解析html网页或者xml
查看全部 -
网页解析器
查看全部 -
urllib2下载网页方法3的对应代码
导入urllib2模块,cookielib模块
创建cookie容器来存储cookie数据
然后使用urllib2的HTTPCookieProcessor,以生成的cookie容器作为参数,生成一个header,将header传给urllib2的build_opener()方法来生成一个opener对象
然后给urllib2安装opener
最后使用urllib2的urlopen()方法传入一个url生成response对象实现网页的下载
查看全部 -
urllib2下载网页方法3
有些网页需要用户登录才能访问,需要添加cookie处理,这里我们使用HTTPCookieProcessor
有些网页需要代理才能访问,我们使用ProxyHandler
有些网页是使用HTTPS加密访问的,这里我们使用HTTPSHandler
有些网页有相互自动的跳转关系,我们使用HTTPRedirectHandler
这些Handler我们传送给urllib2的build_opener()方法来创建一个opener对象
然后传给urllib2的install_opener()方法
然后调使用urllib2的urlopen()方法,整出一个request,来实现网页的下载
查看全部 -
urllib2下载网页方法2的对应代码
导入urllib2模块
创建Request对象:调用urllib2的Request(),以url作为参数,生成Request对象request
1.添加数据:使用request的add_data()方法向服务器提交用户数据(如提交 a 这个数据项,它的值为1)
2.添加header:使用request的add_header()方法向服务器提交头信息(如把爬虫伪装成浏览器)
发送请求:调用urllib2的urlopen()方法,以request作为参数,来提交网页下载请求
查看全部 -
urllib2下载网页方法2(增强处理)
添加一个header:可以向服务器提交最精辟的头信息
添加一个data:可以向服务器提交用户输入的数据
将url,data,header这3个参数传给urllib2的request类,生成一个request对象,仍然使用urllib2的urlopen()方法,以request作为参数发送网页请求
查看全部
举报