,,基于python实现垂直爬虫系统的方法详解

,,基于python实现垂直爬虫系统的方法详解

这篇文章主要为大家详细介绍了大蟒实现垂直爬虫系统的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

html_downloader

从urllib导入请求

定义下载(网址):

如果全球资源定位器(Uniform Resource Locator)为无:

返回

response=request.urlopen(url)

if response.getcode()!=200:

不返回

return response.read()

html_outeputer

data_list=[]

定义收集数据(数据):

数据列表。追加(数据)

极好的输出_html():

fout=open('output.html ',' w ')

fout.write('html ')

fout.write('body ')

fout.write('表格)

对于数据列表中的数据项:

fout.write('tr ')

fout。write(' TD % s/TD ' % dataitem[' URL '])

fout。write(' TD % s/TD ' % dataitem[' title '])

fout。write(' TD % s/TD ' % dataitem[' datetime '])

fout。write(' TD % s/TD ' % dataitem['访问计数'])

fout.write('/tr ')

fout.write('/table ')

fout.write('/body ')

fout.write('/html ')

fout.close()

html _解析器

进口关于

从bs4导入美丽的声音

从urllib.parse导入urljoin

def get_new_urls(page_url,soup):

new_urls=set()

links=soup.find_all('a ',href=re。compile(r '/\ d/\ d/\ w/page \htm '))

对于链接中的链接:

new_url=link['href']

new_full_url=urljoin(page_url,new_url)

新增网址(新增完整网址)

返回新网址

def get_new_data(page_url,soup):

res_data={}

title_node=soup.find('h1 ',class_='arti-title ')

如果标题_节点为无:

返回res_data

RES _ data['标题']=标题节点。get _ text()

datetime_node=soup.find('span ',class_='arti-update ')

RES _ data[' datetime ']=日期时间节点。get _ text()

访问count _ node=soup。find(' span ',class_='WP_VisitCount ')

RES _ data['访问计数']=访问计数节点。get _ text()

res_data['url']=page_url

返回res_data

定义解析(page_url,html_cont):

如果页面_url为没有人或html_cont为无:

返回

soup=BeautifulSoup(html_cont,' html.parser ',from_encoding='utf-8 ')

新网址=获取新网址(网页网址,汤)

新数据=获取新数据(页面_网址,汤)

返回新网址,新数据

蜘蛛_main

导入urls _ manager,html_downloader,\

html_parser,html_outputer

定义抓取(root_url):

计数=1

URLs _ manager。添加新网址(根网址)

#启动爬虫循环

while urls_manager.has_new_url():

new _ URL=URLs _ manager。get _ new _ URL()

打印('爬网% d:% s“%(count,new_url))

html _ cont=html _ downloader。下载(新网址)

new_url,new _ data=html _ parser。parse(new _ URL,html_cont)

URLs _ manager。新增网址(新增网址)

如果是新数据:

html _ outputer。收集数据(新数据)

如果计数==10:

破裂

计数=计数一

html_outputer.output_html()

if __name__=='__main__ ':

root _ URL=' http://新闻。ZZ乌里。edu。cn/'

爬行(根网址)

导入urls _ manager,html_downloader,\

html_parser,html_outputer

定义抓取(root_url):

计数=1

URLs _ manager。添加新网址(根网址)

#启动爬虫循环

while urls_manager.has_new_url():

new _ URL=URLs _ manager。get _ new _ URL()

打印('爬网% d:% s“%(count,new_url))

html _ cont=html _ downloader。下载(新网址)

new_url,new _ data=html _ parser。parse(new _ URL,html_cont)

URLs _ manager。新增网址(新增网址)

如果是新数据:

html _ outputer。收集数据(新数据)

如果计数==10:

破裂

计数=计数一

html_outputer.output_html()

if __name__=='__main__ ':

root _ URL=' http://新闻。ZZ乌里。edu。cn/'

爬行(根网址)

测试_64

从bs4导入美丽的声音

进口关于

html_doc=' ' '

睡鼠的故事/标题/头像

身体

睡鼠的故事

从前有三个小姐妹;他们的名字是

一个href=' http://例子。com/Elsie ' s ter ' id=' link 1 ' Elsie/a

一个href=' http://例子。com/Lacie ' class=' s ter ' id=' link 2 ' Lacie/a和

一个href=' http://例子。com/Tillie ' s ter ' id=' link 3 ' Tillie/a;

他们住在井底100元/人

故事./p

'''

soup=BeautifulSoup(html_doc,' html.parser ')

打印('获取所有链接)

links=soup.find_all('a ')

对于链接中的链接:

print(link.name,link['href'],link.get_text())

打印('获取大区农作物目录实验(大面积作物清查实验)链接)

link_node=soup.find('a ',href='http://example.com/lacie ')

print(link_node.name,link_node['href'],link_node.get_text())

打印('正则匹配)

link_node=soup.find('a ',href=re.compile(r'ill '))

print(link_node.name,link_node['href'],link_node.get_text())

打印('获取P段落文字)

p_node=soup.find('p ',class_='title ')

打印(第节点。姓名,p节点。get_text())

urls _管理器

new_urls=set()

old_urls=set()

def add_new_url(url):

如果全球资源定位器(Uniform Resource Locator)为无:

返回

如果全球资源定位器(Uniform Resource Locator)不在新网址中,并且全球资源定位器(Uniform Resource Locator)不在旧网址中:

新网址。添加(URL)

定义新增网址(网址):

如果资源定位符为没有人或len(URL)==0:

返回

对于全球资源定位器(Uniform Resource Locator)中的网址:

添加新网址(网址)

def get_new_url():

new_url=new_urls.pop()

旧网址。添加(新网址)

返回新网址

定义具有_新_url():

return len(new_urls)!=0

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: