本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-07(10)

2020-08(42)

python爬虫案例教程~淘女郎、百度百科文本、规范化爬虫

发布于2021-06-12 12:15     阅读(517)     评论(0)     点赞(4)     收藏(3)



目录

1. 入门爬虫教程

2. 初级爬虫教程

2.1 爬取百度百科词条基本信息 

2.2 爬取百度百科词条信息框数据

2.3 爬取百度百科中人物图片

3. 规范化、封装化的爬虫


1. 入门爬虫教程

python爬虫入门教程(二):开始一个简单的爬虫,https://blog.csdn.net/aaronjny/article/details/77945329

python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 ),https://blog.csdn.net/aaronjny/article/details/80291997

comment:虽然博客很老了,有部分内容已经不适用了、被淘汰了,但对于新手用来学习还是可以的

2. 初级爬虫教程

source:https://www.cnblogs.com/wsmrzx/p/10531708.html

2.1 爬取百度百科词条基本信息 

  1. import urllib.request
  2. import urllib.parse
  3. from lxml import etree
  4. import ssl
  5. ssl._create_default_https_context = ssl._create_unverified_context
  6. def query(content):
  7. # 请求地址
  8. url = 'https://baike.baidu.com/item/' + urllib.parse.quote(content)
  9. # 请求头部
  10. headers = {
  11. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
  12. }
  13. # 利用请求地址和请求头部构造请求对象
  14. req = urllib.request.Request(url=url, headers=headers, method='GET')
  15. # 发送请求,获得响应
  16. response = urllib.request.urlopen(req)
  17. # 读取响应,获得文本
  18. text = response.read().decode('utf-8')
  19. # 构造 _Element 对象
  20. html = etree.HTML(text)
  21. # 使用 xpath 匹配数据,得到匹配字符串列表
  22. sen_list = html.xpath('//div[contains(@class,"lemma-summary") or contains(@class,"lemmaWgt-lemmaSummary")]//text()')
  23. # 过滤数据,去掉空白
  24. sen_list_after_filter = [item.strip('\n') for item in sen_list]
  25. # 将字符串列表连成字符串并返回
  26. return ''.join(sen_list_after_filter)
  27. if __name__ == '__main__':
  28. while (True):
  29. content = input('查询词语:')
  30. result = query(content)
  31. print("查询结果:%s" % result)

 转载:fei347795790~urllib爬取百度百科

我又用BeautifulSoup的find_all()方法重写了一个,感觉不如xpath简洁。

  1. intro_tag = soup.find_all('div', class_="lemma-summary") # 获取百科基本信息列表
  2. # 处理基本信息:过滤数据,去掉空白
  3. intro_after_filter = [re.sub('\n+', '', item.get_text()) for item in intro_tag]
  4. intro_after_filter = [''.join(i.split()) for i in intro_after_filter]
  5. # 将字符串列表连成字符串并返回
  6. intro_after_filter_str = ''.join(intro_after_filter)
  7. print(intro_after_filter_str)

2.2 爬取百度百科词条信息框数据

  1. soup = BeautifulSoup(text, 'html.parser') # 创建soup对象,获取html代码
  2. title = soup.find_all('dt', class_="basicInfo-item name") # 找到所有dt标签,返回一个列表
  3. node = soup.find_all('dd', class_="basicInfo-item value") # 找到所有dd标签,返回一个列表
  4. allunivinfo = []
  5. titlelist = []
  6. infolist = []
  7. for i in title: # 将所有dt标签内容存入列表
  8. title = i.get_text()
  9. titlelist.append(title)
  10. for i in node: # 将所有dd标签内容存入列表
  11. info = re.sub('\n+', '、', i.get_text()).strip('、')
  12. infolist.append(info)
  13. for i, j in zip(titlelist,
  14. infolist): # 多遍历循环,zip()接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。
  15. info = ''.join((str(i) + ':' + str(j)).split())
  16. allunivinfo.append(info)
  17. print(titlelist)
  18. print(infolist)
  19. print(allunivinfo)

-->为啥不接用用xpath,而改用beautifulsoup解析html网页的信息框数据呢?

因为xpath在提取信息框name,value数据对时的对齐效果不好,它会因为value有多个值而出现错位的情况,而beautifulsoup.find_all可以完美对齐。

2.3 爬取百度百科中人物图片

  • get('href')方式,不要用href!不要用href!不要用href!因为href下载的jpg图片损坏,无法打开
  • get('src')方式
  1. # 找到所有img标签,返回一个url的标签列表
  2. # img_urllist = soup.find_all('div', class_='album-wrap').find('img')
  3. img_urllist = soup.find('div', class_='main_tab main_tab-defaultTab curTab').find_all('img')
  4. for i in img_urllist:
  5. print(i.get('src'))

3. 规范化、封装化的爬虫

source:https://github.com/fifths/python_baike_spider






所属网站分类: 技术文章 > 博客

作者:四季度炒肉

链接:https://www.pythonheidong.com/blog/article/984166/ac7aeafa5abeb35cf99c/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)