功能1: 爬取西拉ip代理官网上的代理ip

环境:python3.8+pycharm
库:requests,lxml
浏览器:谷歌
ip地址:http://www.xiladaili.com/gaoni/

分析网页源码:

选中div元素后右键找到copy再深入子菜单找到copy xpath点击一下就复制到xpath

我们复制下来的xpth内容为:/html/body/div/div[3]/div[2]/table/tbody/tr[50]/td[1]
虽然可以查出来ip,但不利于程序自动爬取所有ip,利用谷歌xpathhelp测试一下

从上图可以看出,只匹配到了一个ip,我们稍作修改,即可达到目的
,有关xpath规则,可以参考下表;

经过上面的规则学习后,我们修改为://*[@class=‘mt-0 mb-2 table-responsive’]/table/tbody/tr/td[1],再利用xpthhelp工具验证一下:

这样我们就可以爬取整个页面的ip地址了,为了方便爬取更多的ip,我们继续往下翻页,找到翻页按钮:

找规律,发现每翻一页,a标签下的href连接地址加1即可,python程序可以利用for循环解决翻页问题即可。
为了提高ip代理的质量,我们爬取评分高的ip来使用。找到评分栏下的xpath路径,这里不再做详细介绍,思路参考上面找ip地址的思路,及xpath规则,过程参考下图:

python代码实现

代码可复制粘贴直接使用,如果出现报错,修改一下cookie。这里使用代理ip爬取,防止ip被封。当然这里的代码还是基础的,有空可以写成代理池,多任务去爬。当然还可以使用其它思路去实现,这里只做入门介绍。当有了这些代理ip后,我们可以用文件保存,或者保存到数据库中,根据实际使用情况而定,这里不做保存,只放到列表变量中保存。

import requests
from lxml import etree
import time


class xilaip_spider:

  def __init__(self):
    self.url = 'http://www.xiladaili.com/gaoni/'
    self.headers = {
      'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/83.0.4103.61 safari/537.36',
      'cookie': 'td_cookie=1539882751; csrftoken=lymoxqp49malmekxs1byemmmsavqptocouwy6wibfmnazzw80xkka8rw2zuo6ssy; hm_lvt_31dfac66a938040b9bf68ee2294f9fa9=1592547159; hm_lvt_9bfa8deaeafc6083c5e4683d7892f23d=1592535959,1592539254,1592612217; hm_lpvt_9bfa8deaeafc6083c5e4683d7892f23d=1592612332',
    }
    self.proxy = '116.196.85.150:3128'
    self.proxies = {
      "http": "http://%(proxy)s/" % {'proxy': self.proxy},
      "https": "http://%(proxy)s/" % {'proxy': self.proxy}
    }
    self.list1 = []

  def get_url(self):
    file = open('ip_proxy.txt', 'a', encoding='utf-8')
    ok_file = open('okip_proxy.txt', 'a', encoding='utf-8')
    for index in range(50):
      time.sleep(3)
      try:
        res = requests.get(url=self.url if index == 0 else self.url + str(index) + "/", headers=self.headers,
                  proxies=self.proxies, timeout=10).text
      except:
        continue
      data = etree.html(res).xpath("//*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[1]")
      # '//*[@id="scroll"]/table/tbody/tr/td[1]'
      score_data = etree.html(res).xpath("//*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[8]")
      for i, j in zip(data, score_data):
        # file.write(i.text + '\n')
        score = int(j.text)
        # 追加评分率大于十万的ip
        if score > 100000:
          self.list1.append(i.text)
      set(self.list1)
    file.close()
    ok_ip = []
    for i in self.list1:
      try:
        # 验证代理ip是否有效
        res = requests.get(url='https://www.baidu.com', headers=self.headers, proxies={'http': 'http://' + i},
                  timeout=10)
        if res.status_code == 200:
          # ok_file.write(i + '\n')
          ok_ip.append(i)
      except:
        continue
    ok_file.close()
    return ok_ip

  def run(self):
    return self.get_url()


dl = xilaip_spider()
dl.run()

到此这篇关于python爬虫简单运用爬取代理ip的实现的文章就介绍到这了,更多相关python 爬取代理ip内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!