这篇文章主要为大家详细介绍了大蟒实现垂直爬虫系统的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。