您的位置:首页 >新闻资讯 > 正文

代理IP解析同一网页爬虫的四种实现方式

来源:互联网 作者:admin 时间:2019-09-21 15:15:20

  入门Python最简单的方式就是爬虫了,因为爬虫是有一套固定的模式的,爬虫框架也是有固定的参考。在搭建好代理IP池之后,做好一些基础设置就可以开展。下面,ET代理给大家以爬取同一网站页面的4种不同方式来跟大家介绍爬虫。


代理IP解析同一网页爬虫的四种实现方式


  基础爬虫的固定模式:


  我们这里说的基础爬虫,是指无需处理验证码、代理、异象异步加载等高阶爬虫技术的爬虫形式。


  通常来说,基础爬虫的两大请求库 urllib 和 requests 中 requests 一般是被绝大部分人所喜欢的,即使Urllib的功能也算齐全。两大解析库 BeautifulSoup 由于本身强大的Html文档解析能力而深受喜爱,另外一种解析库 lxml 在搭配 xpath 表达式的基础上也大大提升了效率。


  就基础爬虫来讲,两大请求库和两大解析库的组合方式根据个人喜好去选择。


  下面介绍比较常用的爬虫组合工具是:


  requests + BeautifulSoup


  requests + lxml


  那么,下面以腾讯新闻首页的新闻信息抓取作为例子,向大家讲解同一网页爬虫的四种实现方式。


  假如要抓取每条新闻的标题和链接,并把其组合为一个字典的结构打印出来。第一步查看Html源码明确新闻标题信息组织结构。


  能够目标信息存在于 em 标签下 a 标签内的文本和 href 属性中。可随时借助 requests 库构造请求,并用 BeautifulSoup 或者 lxml 进行解析。


  方式一:requests + BeautifulSoup + find_all 进行信息提取


  # find_all method

  import requests

  from bs4 import BeautifulSoup

  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}

  url = 'http://news.qq.com/'

  Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml')

  em = Soup.find_all('em', attrs={'class': 'f14 l24'})for i in em:

  title = i.a.get_text()

  link = i.a['href']

  print({'标题': title,

  '链接': link

  })

  同样是 requests + BeautifulSoup 的爬虫组合,但在信息提取上采用了 find_all 的方式。


  方式二: requests + BeautifulSoup + select css选择器


  # select method

  import requests

  from bs4 import BeautifulSoup

  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}

  url = 'http://news.qq.com/'Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml')

  em = Soup.select('em[class="f14 l24"] a')for i in em:

  title = i.get_text()

  link = i['href'] print({'标题': title,

  '链接': link

  })select method

  import requests

  from bs4 import BeautifulSoup

  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}

  url = 'http://news.qq.com/'Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml')

  em = Soup.select('em[class="f14 l24"] a')for i in em:

  title = i.get_text()

  link = i['href'] print({'标题': title,

  '链接': link

  })


  方式三: requests + lxml/etree + xpath 表达式


  # lxml/etree method

  import requests

  from lxml import etree

  headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}

  url = 'http://news.qq.com/'

  html = requests.get(url = url, headers = headers)

  con = etree.HTML(html.text)

  title = con.xpath('//em[@class="f14 l24"]/a/text()')

  link = con.xpath('//em[@class="f14 l24"]/a/@href')

  for i in zip(title, link):

  print({'标题': i[0],

  '链接': i[1]

  })

  使用 lxml 库下的 etree 模块进行解析,然后使用 xpath 表达式进行信息提取,效率要略高于 BeautifulSoup + select 方法。这里对两个列表的组合采用了 zip 方法。


  方式四: requests + lxml/html/fromstring + xpath 表达式


  # lxml/html/fromstring method

  import requests

  import lxml.html as HTML

  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}

  url = 'http://news.qq.com/'

  con = HTML.fromstring(requests.get(url = url, headers = headers).text)

  title = con.xpath('//em[@class="f14 l24"]/a/text()')

  link = con.xpath('//em[@class="f14 l24"]/a/@href')

  for i in zip(title, link):

  print({'标题': i[0],'链接': i[1]

  })


  其实与方法三类似,只是在解析上使用了 lxml 库下的 html.fromstring 模块。


  以上就是同一网页爬虫的四种实现方式的具体流程,ET代理是国内优质的动态IP代理服务商,代理ip软件覆盖全国160多个城市、3000万海量代理IP供应,支持一键切换IP,操作简单。


相关文章内容简介