爬虫实例 基础教程

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.  
  45. # for i in get_html('http://www.runoob.com/python/python-100-examples.html'):
  46. #     print(i)
  47. # for i in get_html_link(link):
  48. #     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

    扫描二维码关注公众号,回复: 11934664 查看本文章
  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()

 

猜你喜欢

转载自blog.csdn.net/xixi20200/article/details/109066229