博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python简单爬虫(一)
阅读量:6719 次
发布时间:2019-06-25

本文共 2894 字,大约阅读时间需要 9 分钟。

  学习python前纠结了下,到底是应该一个个知识点吃透,然后写些小程序。还是应该快速掌握基础语法,快速实践。思考后认为前者这么学习速度真心不高,于是花2天时间看了下python3的语法,虽然很多都不明白,但是带着小项目来学习直接解决问题。在项目中遇到问题,查阅一点点解决,这样很靠谱。

  在实现一个最简单的爬虫前,应该知道需要用到哪些东西? 

  1.如果发送一个http请求,来抓取网页内容。

  2.如何方便的解析html的dom节点,如果有像phpquery这样的工具包就太简单了。

  百度了下发现 urlib模块能解决第一个问题,BeautifulSoup模块能解决第二个问题

  urlib3模块简单使用  

1 import urllib3 2  3 #请求的地址 4 url = 'https://www.baidu.com/' 5  6 http = urllib3.PoolManager() 7 r = http.request('GET',url) 8  9 print(r.status)     #请求状态码10 print(r.data)       #获取内容

  需要注意的是打印出内容(r.data)发现尼玛, 总是有个 b' 这样的东西在字符串最前面。google下发先大致是说,python默认字符是ascii,但是请求的网页编码是utf8字符的,获取的内容需要转成

utf8字符集然后在输出,可以这么干。

print(r.data.decode('utf-8'))

  然后重新运行发现大功告成。

  再来看下BeautifulSoup模块,其实挺简单的就和jquery操作dom类似,具体看文档即可.

  

1 from bs4 import BeautifulSoup 2 import re #正则 3  4 str = ''' 5       
23 '''24 25 soup = BeautifulSoup(str,'html.parser',from_encoding='utf-8')26 27 print('获取所有的链接')28 links= soup.find_all('a'); #list29 for a in links:30 print(a),print(a['href']) #获取a标签,和属性href31 32 print('获取href为 /index.php?m=Admin&c=Goods&a=index&typelist=1的url')33 links = soup.find('a',href="/index.php?m=Admin&c=Goods&a=index&typelist=1")34 print(links.name,links['href'],links.get_text())35 36 37 print('通过class属性')38 links = soup.find('ul',class_='main-menu')39 print(links)40 41 print('正则匹配')42 links = soup.find_all('a',href=re.compile(r"List")) # 加r -> 要转义\只需要写成 \\即可 , 不然要写成\\\43 print(links)

  最后结合2个模块来实现,获取抓取页面的 a标签的href

1 from bs4 import BeautifulSoup 2 import re #正则 3 import urllib.parse 4 import urllib3 5  6 r_url = 'http://baike.baidu.com/link?url=41wW1kkRvhT23i_c6258EtBeBv6Xwtz7gwd3t0q5k-xCs_ipCGRc_ixcCLMail3QtQe4ZRgOK83ek9aHm44QPa' 7  8 #发送请求获取内容 9 http = urllib3.PoolManager()10 r = http.request('GET',r_url)11 12 str = data = r.data.decode('utf-8')13 14 '''15 #挽尊学习法,先发获取的内容生成文件,看下到底是什么16 f = open('2.html','w')17 f.write(data.decode('utf-8'))18 f.close()19 '''20 21 soup = BeautifulSoup(str,'html.parser',from_encoding='utf-8')22 #通过正则获取所有href 为  /view/123/456.htm 这样的链接23 links = soup.find_all('a',href=re.compile(r'/view/[\d/]+\.htm'))  # 加r -> \只需要一个 \转义 , 不然要写成\\\24 25 for url in links:26     new_url = url['href']27     '''28     将 r_url的域名-> http://baike.baidu.com29     和 新的url ->  /view/123/456.htm 组装起来30     '''31     new_full_url = urllib.parse.urljoin(r_url,new_url) #http://baike.baidu.com/view/123/456.htm32     print(new_full_url)

  参考:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

     http://urllib3.readthedocs.io/en/latest/ 

      

 

转载地址:http://kyumo.baihongyu.com/

你可能感兴趣的文章
阿里巴巴发布物联网平台:不止互动 更能互懂
查看>>
威胁情报工具:更快?更聪明?
查看>>
荷兰Serverius数据中心如何逆袭运营困境
查看>>
移动后端即服务带给我们什么?
查看>>
JS的运行机制
查看>>
PyCharm - Linux下最好的Python IDE
查看>>
NB-IoT来了!网络还差两个月启用,芯片和平台已经准备好了
查看>>
卢东:智能路由,家庭的数据中心
查看>>
智能家庭本周锋闻:小米推智能插座等四件新品,“真智能家居”?
查看>>
C#程序员经常用到的10个实用代码片段
查看>>
WebP支持:超乎你想象
查看>>
XSS与XSSI区别何在?
查看>>
Wink Hub:老牌家居商的智能中控平台
查看>>
云存储时代更好的选择,你的数据由你主宰
查看>>
快速迭代的互联网研发模式下测试如何突破?
查看>>
劫持管理员权限 赛门铁克提醒用户警惕Android勒索软件
查看>>
自家应用都不支持WP系统 微软移动策略让股东怒了
查看>>
如何备份一个国家
查看>>
SDDC架构完全应用?还尚需时日……
查看>>
贵州省大数据发展驶入“信息高速公路”
查看>>