当前位置:   article > 正文

爬虫实例--菜鸟教程_爬虫菜鸟教程

爬虫菜鸟教程

1、第一种方法

  1. # 第一种方式:requests 和 lxml结合使用
  2. import requests
  3. from lxml import etree
  4. #1、拿到所有的页面链接,并使用yield返回完整的超链接
  5. def get_html(url):
  6. # 获取页面HTML
  7. html=requests.get(url)
  8. # 使用etree格式化HTML
  9. seq=etree.HTML(html.text)
  10. link_list=seq.xpath('//*[@id="content"]/ul/li/a/@href')
  11. for i in link_list:
  12. yield "http://www.runoob.com"+i
  13. # 2、获取详细的页面数据
  14. def get_html_link(link):
  15. for i in link:
  16. # 获取界面
  17. link_html=requests.get(i)
  18. # 初始化
  19. link_seq=etree.HTML(link_html.content)
  20. # 得到标题
  21. title=link_seq.xpath('//*[@id="content"]/h1/text()')[0]
  22. # 得到题目内容
  23. subject=link_seq.xpath('//*[@id="content"]/p[position()>1 and position()<4]/text()')
  24. subject_list='\n'.join(subject)
  25. yield (title,subject_list)
  26. # 3、保存数据
  27. def save_subject(title_subject):
  28. with open("G:/1.txt",'a+',encoding='utf-8') as f:
  29. for title,subject_list in title_subject:
  30. f.write(title+'\n')
  31. f.write(subject_list+'\n')
  32. f.write("#"*50+'\n')
  33. # 4、函数回调
  34. def funcall(url):
  35. link=get_html(url)
  36. title_subject=get_html_link(link)
  37. save_subject(title_subject)
  38. # 5、主函数
  39. def main():
  40. url='http://www.runoob.com/python/python-100-examples.html'
  41. funcall(url)
  42. if __name__=="__main__":
  43. main()
  44. # for i in get_html('http://www.runoob.com/python/python-100-examples.html'):
  45. # print(i)
  46. # for i in get_html_link(link):
  47. # print(i)

2、第二种方法

  1. # 第二种方式:urllib.request 与 beautifulsoup结合使用
  2. import urllib.request
  3. from bs4 import BeautifulSoup
  4. # 1、获取所有页面链接
  5. def get_html(url):
  6. # 获取页面HTML源码
  7. html=urllib.request.urlopen(url).read()
  8. # 格式化html
  9. soup=BeautifulSoup(html,'lxml')
  10. # 首先找到第一个id='content'的标签,并找到子标签ul(2个)
  11. # 其次遍历子标签ul,并获取到所有的ul的子标签li
  12. # 然后遍历li标签,并获取到li标签下的所有a标签
  13. # 使用yield返回超链接
  14. for i in soup.find(id='content').find_all('ul'):
  15. for j in i.find_all('li'):
  16. for k in j.find_all('a'):
  17. yield 'http://www.runoob.com'+k['href']
  18. # 2、获取详细的页面数据
  19. def get_html_link(link):
  20. # 遍历所有的超链接
  21. for i in link:
  22. # 请求超链接页面HTML
  23. link_list=urllib.request.urlopen(i).read()
  24. # 格式化HTML
  25. soup=BeautifulSoup(link_list,'lxml')
  26. # 获取id='content'的标签
  27. content=soup.find(id='content')
  28. if content:
  29. # 获取h1标签的内容
  30. title=content.find('h1').string
  31. # 获取前3个p标签的内容
  32. conten_list=content.find_all('p',limit=3)
  33. subject=''
  34. for j in conten_list:
  35. subject+=j.get_text()
  36. yield (title,subject)
  37. # 3、数据保存
  38. def save_suject(title_content):
  39. with open('G:/2.txt','w+',encoding='utf+8') as f:
  40. for tile,content in title_content:
  41. f.write(tile+'\n')
  42. f.write(content+'\n')
  43. f.write('#'*80+'\n')
  44. # 4、函数回调
  45. def fun_call(url):
  46. link=get_html(url)
  47. title_content=get_html_link(link)
  48. save_suject(title_content)
  49. # 5、主函数
  50. def main():
  51. url='http://www.runoob.com/python/python-100-examples.html'
  52. fun_call(url)
  53. if __name__=='__main__':
  54. main()

3、第三种方法

  1. # 第三种方式
  2. import requests,re
  3. from bs4 import BeautifulSoup
  4. # 1、获取页面的超链接信息
  5. def get_html(url):
  6. html=requests.get(url)
  7. html.encoding='utf-8'
  8. soup=BeautifulSoup(html.text,'lxml')
  9. for i in soup.find_all('a',href=re.compile('^/python/python-exercise')):
  10. yield 'http://www.runoob.com'+i.get('href')
  11. # 2、获取超链接页面的详细信息
  12. def get_html_link(link_list):
  13. for i in link_list:
  14. html_link=requests.get(i)
  15. html_link.encoding='utf-8'
  16. soup=BeautifulSoup(html_link.text,'lxml')
  17. title=soup.find('div',class_="article-intro").h1.string
  18. con=soup.find('div',class_="article-intro").find_all('p')
  19. i=1
  20. list1=[]
  21. while True:
  22. if re.match('程序源代码',con[i].text) or re.match(' Python 100例',con[i].text) or re.match('以上实例输出结果为',con[i].text):
  23. break
  24. else:
  25. list1.append(con[i].text)
  26. i+=1
  27. yield (title,list1)
  28. # 3、保存数据
  29. def save_data(content_list):
  30. with open('G:/3.txt','w+',encoding='utf+8') as f:
  31. for tile,content in content_list:
  32. f.write(tile+'\n')
  33. for i in range(len(content)):
  34. f.write(content[i]+'\n')
  35. f.write('#'*80+'\n')
  36. # 4、函数回调
  37. def fun_call(url):
  38. link_list=get_html(url)
  39. content_list=get_html_link(link_list)
  40. save_data(content_list)
  41. # 5、主函数
  42. def main():
  43. url='http://www.runoob.com/python/python-100-examples.html'
  44. fun_call(url)
  45. if __name__=='__main__':
  46. main()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/764195
推荐阅读
相关标签
  

闽ICP备14008679号