-
分析目标即页面分析导致抓取策略查看全部
-
下载器的功能图解查看全部
-
python 3.6X中没有add_data方法,Request类中有data属性可以直接进行赋值 注意:网页提交是二进制需要强制类型转换 req = urllib.request.Request(url='https://www.baidu.com/') req.data = b'some data' urllib.request.urlopen(req)查看全部
-
from bs4 import BeautifulSoup import re import urlparse class HtmlParser(object): def _get_new_urls(self, page_url, soup): new_urls = set() links = soup.find_all('a', href=re.compile(r"/view/\d+\.htm")) for link in links: new_url = link['href'] new_full_url = urlparse.urljoin(page_url, new_url) new_urls.add(new_full_url) return new_urls def _get_new_data(self, page_url, soup): res_data = {} res_data['url'] = page_url title_node = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find("h1") res_data['title'] = title_node.get_text() summary_node = soup.find('div', class_="lemma-summary") res_data['summary'] = summary_node.get_text() return res_data def parse(self, page_url, html_cont): if page_url is None or html_cont is None: return soup = BeautifulSoup(html_cont, 'html.parse', from_encoding='utf-8') new_urls = self._get_new_urls(page_url, soup) new_data = self._get_new_data(page_url, soup) return new_urls, new_data查看全部
-
from baike_spider import url_manager, html_downloader, html_parser,\ html_outputer class SpiderMain(): def __init__(self): self.urls=url_manager.UrlManager() self.downloader=html_downloader.HtmlDownloader() self.parser=html_parser.HtmlParser() self.outputer=html_outputer.HtmlOutputer() def craw(self,root_url): count=1 self.urls.add_new_url(root_url) while self.urls.has_new_url():#如果有待爬去的url new_url=self.urls.get_new_url()#取出一个 print 'craw %d:%s' %(count,new_url) html_cont=self.downloader.download(new_url) new_urls,new_data=self.parser.parse(new_url,html_cont) self.urls.add_new_urls(new_urls) self.outputer.collect_data(new_data) count=count+1 if count=1000 break self.outputer.output_html() if _name_=="__main__": root_url = "http://baike.baidu.com/view/21087.htm" obj_spider=SpiderMain() obj_spider.craw(root_url)查看全部
-
URL查看全部
-
网页解析器:从网页中提取有价值数据的工具 网页解析器以Html网页字符串为输入提取出价值数据和新URL列表 Python网页解析器: 1.正则表达式 2.html.parser 3.BeautifulSoup(可使用html.parser和lxml作为解析器,较强大) 4.lxml 正则表达式采取模糊匹配 后三者采取结构化解析 结构化解析-将整个网页文档下载成一个DOM树,以树的方式进行遍历和访问。将整个网页文档当成一个Document对象,其下是根节点<html>,根节点下有元素<head>和元素<body>。<head>元素下有<title>元素,每个元素如果没有子元素就会对应到它的文本(如title对应文本的标题)。元素<body>下包含元素<a>和元素<div>,元素<a>下是文本的链接,元素<div>包含子元素或文本段落。如果每个元素有自身属性也会包含其属性如<href>。 通过树可以定位到元素,访问其属性和自身文本查看全部
-
爬虫调度器:启动、停止、监视爬虫运行情况; URL管理器:将要爬取的URL和已经爬取的URL 网页下载器:URL管理器将将要爬取的URL传送给网页下载器下载下来; 网页解析器:将网页下载器下载的网页的内容传递给网页解析器解析; (1)、解析出新的URL传递给URL管理器; (2)、解析出有价值的数据; 上面三个形成了一个循环,只要网页解析器有找到新的URL,就一直执行下去;查看全部
-
urllib2下载网页方法--1(最简介方法) import urllib2 response = urllib2.urlopen('http://wwww.baidu.com') #若状态码为200,则表示成功 print response.getcode() #读取下载的内容 cont = response.read() 2.共享处理 添加data(需要用户输入的参数)、http header(向服务器提交http信息) 将url、data、header传送给urllib2.Request生成request对象,后继续使用urllib2.urlopen(request) import urllib2 #导入模块 request = urllib2.request(url)#创建Request对象 request.add_data(‘a’,‘1’)#提交数据/如a这个数据项等于1 request.add_header(‘User-Agent’,‘Mozilla/5.0’)#添加http的header/将爬虫 伪装成Mozilla浏览器 response = urllib2.urlopen(request)#发送请求获取结果 3.添加特殊情景的处理器: 需要用户登录的需要cookie处理:HTTPCookieProcessor 代理访问:ProxyHandler HTTPS加密访问:HTTPSHandler URL相互自动跳转:HTTPRedirectHandler 将这些handler传递给urllib2的build_opener的方法来创建一个opener对象: opener = urllib2.build_opener(handler) 然后给urllib2 install_opener这个opener: urllib2.install_opener(opener) 后urllib2.urlopen(url) 或urllib2.urlopen(request) 举例cookie,如图查看全部
-
BeautifulSoup语法: 根据一个HTML网页字符串创建BeautifulSoup对象,创建的同时就将整个文档字符串下载成一个DOM树,后根据这个DOM树搜索节点。find_all方法搜索出所有满足的节点,find方法只会搜索出第一个满足的节点,两方法参数一致。搜索出节点后就可以访问节点的名称、属性、文字。因此在搜索时也可以按照以上三项搜索。 from bs4 import BeautifulSoup #根据HTML网页字符串创建BeautifulSoup对象 soup = BeautifulSoup( html_doc, #HTML文档字符串 ‘html.parser’ #HTML解析器 from_encoding=‘utf8’#HTML文档的编码 ) 搜索节点: find_all(name,attrs,string)#方法 soup.find_all(‘a’)#查找所有标签为a的节点 #查找所有标签为a,链接符合/view/123.htm形式的节点 soup.find_all(‘a’,href=‘/view/123.htm’) soup.find_all(‘a’,href=re.compile(r‘/view/\d+\.htm’)) #查找所有标签为div,class为‘abc’,文字为Python的节点 soup.find_all(‘div’,class_=‘abc’,string=‘Python’) #_是因为dom中有class 访问节点信息 #得到节点:<a href=‘1.html’>Python</a> #获取查找到的节点的标签名称 node.name #获取查找的a节点的href属性 node['href'] #获取查找到的a节点的链接文字 node.get_text()查看全部
-
URL管理器:管理待抓取URL集合和已抓取URL集合 防止重复抓取、防止循环抓取 功能: 1.判断待添加URL是否在容器中 2.添加新URL到待爬取集合 3.判断是否有待爬取URL 4.获取待爬取URL 5.将URL从待爬取移动至已爬取查看全部
-
mac的快捷键为command+1,选择create method查看全部
-
1.到http://www.crummy.com/software/BeautifulSoup/网站上上下载,最新版本是4.6.0。 2.下载完后解压,放到python下。 3.cmd,切换到C:/Python27/beautifulsoup4-4.6.0/目录下(根据自己解压后的目录和下载的版本号修改) cd C:/Python27/beautifulsoup4-4.6.0 4.运行命令 setup.py build setup.py install 源自 http://kevinkelly.blog.163.com/blog/static/21390809320133185748442/查看全部
-
python 3.x无法输出中文 open('output.html', 'w', encoding='utf-8') 这样设置后可以输出 如果root_url中包含中文得通过urllib.parse.quote()转换 urllib.parse.quote('http://baike.baidu.com/item/中文/129156', safe='/:')查看全部
-
HTML标准DOM树查看全部
举报
0/150
提交
取消