首页 > 编程语言 >Python抓取数据如何设置爬虫ip

Python抓取数据如何设置爬虫ip

时间:2023-03-23 10:01:09浏览次数:47  
标签:status code Python ip 爬虫 url print

在写爬虫爬取github数据的时候,国内的ip不是非常稳定,在测试的时候容易down掉,因此需要设置爬虫ip。本片就如何在Python爬虫中设置爬虫ip展开介绍。

也可以爬取外网

爬虫编写

需求

做一个通用爬虫,根据github的搜索关键词进行全部内容爬取。

代码

首先开启爬虫ip,在设置中修改HTTP端口。

Python抓取数据如何设置爬虫ip_数据抓取

在爬虫中根据设置的系统爬虫ip修改proxies的端口号:

import requests
from lxml import html
import time
etree = html.etree

def githubSpider(keyword, pageNumberInit):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
    }

    # 搜索的关键词
    keyword = keyword
    # 查询的起始页数
    pageNum = pageNumberInit

    # 设置一个通用的url模板
    url = 'https://github.com/search?p=%d&q={}'.format(keyword)
    # 根据爬虫ip配置端口进行修改
    proxies = {'http': 'http://jshk.com.cn:30008', 'https': 'http://jshk.com.cn:30009'}

    status_code = 200
    while True and pageNum:
        # 对应页码的url
        new_url = format(url % pageNum)

        # 使用通用爬虫对url对应的一整张页面进行爬取
        response = requests.get(url=new_url, proxies=proxies, headers=headers)

        status_code = response.status_code  # 状态码

        if status_code == 404:  # 最后一页
            print("===================================================")
            print("结束")
            return
        if (status_code == 429):  # 访问次数过多
            print("正在重新获取第" + str(pageNum) + "页内容....")

        if (status_code == 200):  # 正常爬取
            print("===================================================")
            print("第" + str(pageNum) + "页:" + new_url)
            print("状态码:" + str(status_code))
            print("===================================================")

            page_text = response.text
            tree = etree.HTML(page_text)
            li_list = tree.xpath('//*[@id="js-pjax-container"]/div/div[3]/div/ul/li')

            for li in li_list:
                name = li.xpath('.//a[@class="v-align-middle"]/@href')[0].split('/', 1)[1]
                link = 'https://github.com' + li.xpath('.//a[@class="v-align-middle"]/@href')[0]
                # 解决没有star的问题
                try:
                    stars = li.xpath('.//a[@class="Link--muted"]/text()')[1].replace('\n', '').replace(' ', '')
                except IndexError:
                    print("名称:" + name + "\t链接:" + link + "\tstars:" + str(0))
                else:
                    print("名称:" + name + "\t链接:" + link + "\tstars:" + stars)

            pageNum = pageNum + 1

if __name__ == '__main__':
    githubSpider("hexo",1) # 输入搜索关键词和起始页数

爬取结果如下,包含搜索结果的名称、链接以及stars:

Python抓取数据如何设置爬虫ip_代理ip_02

后记

爬取公网的简单测试,状态码:

import requests
#配置爬虫ip
proxies={'http': 'http://jshk.com.cn:30008', 'https': 'http://jshk.com.cn:30009'}
response = requests.get('https://www.google.com/',proxies=proxies)
print(response.status_code)

标签:status,code,Python,ip,爬虫,url,print
From: https://blog.51cto.com/u_13488918/6144392

相关文章

  • 在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载的对象接口
    在基于vue-next-admin 的Vue3+TypeScript前端项目中,可以整合自己的.NET后端,前端操作一些功能的时候,为了使用方便全局挂载的对象接口,以便能够快速处理一些特殊的操作,如......
  • 爬虫进阶之多线程爬虫问题详解
    大多数正常人在下载图片的时候都是一个一个点击保存,图片越多花费的时间越多,大大的降低了工作效率。如果是学了爬虫的,一定会想到多线程来自动下载保存图片。多线程介绍:多......
  • ChIP-seq 分析:Differential Peaks(15)
    动动发财的小手,点个赞吧!1.寻找差异区域然而,识别特定于细胞系或条件的峰并不能捕获表观遗传事件的全部变化。为了识别表观遗传事件的差异,我们可以尝试量化IP样本中非......
  • Hadoop MapReduce&Eclipse plugin插件安装
    HadoopMapReduce&Eclipseplugin插件安装首先将插件拷贝到eclipse的plugin目录配置hadoop的安装路径选出MapReduce视图设置Map/Reducemaster节点信息然后就可以查看Hdfs......
  • Python里参数是如何传递的?
    如果接触过其他的编程语言,比如C/C++,很容易想到,常见的参数传递有2种:值传递和引用传递。所谓值传递,通常就是拷贝参数的值,然后传递给函数里的新变量。这样,原变量和新变量......
  • Python基础之sorted()函数用法
    1、简单的排序sorted函数可以对可迭代类型的容器内的数据进行排序lst1=(5,4,3,2,1)lst2=('F','D','Y','e','a','v')#字符串类型的排序按照ASCII的大小进行比较L1......
  • python if
    '''if判断语句'''age=18;age2=10;ifage>=18:print("成年人")'''if判断语句'''age=input("请输入你的年纪");ifint(age)<=18:print(f"你{age}......
  • 【Python】批量提取Fibersim xml文件中的节点网格数据
    程序功能:输入需求:fibersim导出的ply的xml文件,可以很多个也没问题。但名字要有规律,不然没法循环读写。比如我自己用的就是x1.xml、x2.xml、Y1.xml......的文件名定义......
  • 深入理解 Python 虚拟机:字典(dict)的实现原理及源码剖析
    深入理解Python虚拟机:字典(dict)的实现原理及源码剖析在本篇文章当中主要给大家深入介绍一下在cpython当中字典的实现原理,在本篇文章当中主要介绍在早期python3当中的......
  • python 中实现文件的复制
     001、(base)[root@PC1test3]#ls##测试数据及脚本a.txttest.py(base)[root@PC1test3]#cattest.py##复制程序importosos.popen('......