成都市建设网扬尘监控网站,中国机械加工网加热炉节能,wordpress qq 微信登录,中卫中医肿瘤医院平面设计师简单爬虫三步走#xff0c;So easy~
本文介绍一个使用python实现爬虫的超简单方法#xff0c;精通爬虫挺难#xff0c;但学会实现一个能满足简单需求的爬虫#xff0c;只需10分钟#xff0c;往下读吧~
该方法不能用于带有反爬机制的页面#xff0c;但对于我这样的非专业…简单爬虫三步走So easy~
本文介绍一个使用python实现爬虫的超简单方法精通爬虫挺难但学会实现一个能满足简单需求的爬虫只需10分钟往下读吧~
该方法不能用于带有反爬机制的页面但对于我这样的非专业爬虫使用者几乎遇到的各种简单爬虫需求都是可以搞定的。
归纳起来只有简单的3步
使用开发人员工具分析网页HTML请求网页获取相应信息
我们以一个简单的需求为例 从wiki百科标普500指数页面中利用爬虫自动获取 SP 500指数所对应的所有股票。如图所示 第一步使用开发人员工具分析网页HTML
首先我们要对待爬取的网页人工的进行结构分析 这里我使用的是Google浏览器 进入页面后按下F12打开开发人员工具 选择开发人员工具左上角的小箭头 这是一个映射工具 通过它你可以轻松的观察网页中每一个渲染后的元素所对应于网页HTML中的位置 这能够帮我们很轻松的完成html的结构分析从而快速实现一个爬虫 就像这样 通过观察我们发现所有待爬取的股票信息都位于一个表格中 这个表格对应于一个table classwikitable sortable jquery-tablesorter 标签 而表格中每一行的的股票信息又对应了table 下的一个tr 标签 因此我们爬虫的工作就是get到table 下的所有tr 标签并解析出相应内容 第一步网页HTML分析完成 第二步请求网页
下面开始进入代码阶段 这里我使用的是Python3 需要用到requests 和 BeautifulSoup 这两个库 因此别忘记引用
import bs4
import requests
首先我们需要请求网页
response requests.get(http://en.wikipedia.org/wiki/List_of_S%26P_500_companies)
随后使用BeautifulSoup解析
soup bs4.BeautifulSoup(response.text,html5lib)
没有错就是这么简单~ 第三步获取相应信息
结合第一步的分析 我们爬虫的工作就是get到table 下的所有tr 标签并解析出相应内容 通过BeautifulSoup库的一个核心的方法select 我们便能完成这个工作 首先获取所有的tr 标签
symbolslist soup.select(table)[0].select(tr)[1:]
然后获取tr 标签中所需的属性并打印出来
symbols []
for i, symbol in enumerate(symbolslist):tds symbol.select(td)symbols.append((tds[0].select(a)[0].text, # Tickertds[1].select(a)[0].text, # Nametds[3].text, # Sector))
大功告成最终的程序运行结果如下
全部代码如下
import bs4
import requestsif __name__ __main__:Download and parse the Wikipedia list of SP500 constituents using requests and BeautifulSoup.Returns a list of tuples for to add to MySQL.# Use requests and BeautifulSoup to download the# list of SP500 companies and obtain the symbol tableresponse requests.get(http://en.wikipedia.org/wiki/List_of_S%26P_500_companies)soup bs4.BeautifulSoup(response.text,html5lib)# This selects the first table, using CSS Selector syntax# and then ignores the header row ([1:])symbolslist soup.select(table)[0].select(tr)[1:]# Obtain the symbol information for each# row in the SP500 constituent tablesymbols []for i, symbol in enumerate(symbolslist):tds symbol.select(td)symbols.append((tds[0].select(a)[0].text, # Tickertds[1].select(a)[0].text, # Nametds[3].text, # Sector))# show the symbolsshowNum 10for i in range(showNum):print(symbols[i])