python中画糖葫芦的代码_python简单爬虫(一)

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

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

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

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

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

urlib3模块简单使用

1 importurllib32

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 importBeautifulSoup2 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'); #list

29 for a inlinks:30 print(a),print(a['href']) #获取a标签,和属性href

31

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 importBeautifulSoup2 import re #正则

3 importurllib.parse4 importurllib35

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 inlinks: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.htm

32 print(new_full_url)

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值