使用代理池多线程爬虫亚马逊网站(python,requests,bs4)

ProxyPool 爬虫代理IP池使用

准备与配置

下文所需的两个代理池文件均可从此处下载

redis准备

打开Redis-x64-5.0.9文件夹
双击redis-server.exe即可运行,或使用cmd进入解压文件夹后:

redis-server.exe redis.windows.conf

更详细步骤参考菜鸟教程

启动项目:

将proxy_pool文件夹复制到项目文件夹下

# 用编译器打开项目
# 若编译器提示需要导入import,直接导入,若无提示可以手动导入飘红import处缺少的包,无飘红则继续往后进行
# 从编译器终端进入代理池文件夹
cd proxy_pool

# 启动调度程序
python proxyPool.py schedule
# 可能会出现错误提示缺包,如click等,提示缺了什么就在终端里pip install相应包,然后重复上一步

# 在编译器里新建另一个终端继续下面的操作
# 启动webApi服务
python proxyPool.py server
# 同样若缺包则重复上一步
# lxml的安装容易出错,可以不用指定的4.3.1版本,用最新版的就好了
# 有时会报这个错误:TypeError: required field "type_ignores" missing from Module
# 这是因为python3.8与werkseug的兼容问题,参照这个博客https://www.jianshu.com/p/95588bf4e63d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation的方案去解决即可

测试与使用

  • Api接口介绍

启动web服务后, 默认配置下会开启 http://127.0.0.1:5010 的api接口服务:

api method Description arg
/ GET api介绍 None
/get GET 随机获取一个代理 None
/get_all GET 获取所有代理 None
/get_status GET 查看代理数量 None
/delete GET 删除代理 proxy=host:ip
  • 测试是否成功

等待服务运行一会过后,cmd进入redis文件夹:

redis-cli.exe -h 127.0.0.1 -p 6379
keys *

若显示不为空则抓取到的ip成功入库
此时使用浏览器测试api:http://127.0.0.1:5010/get_all/
都成功就可以开始放心爬了

代码

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd
import xlwt
import time
import random
import threading
import queue
from fake_useragent import UserAgent
beginNum=0              #设置开始行数
endnum=100              #设置结束行数
srcdata='srcdata.xlsx'  #设置读取的原始文件(存有一列产品号)
savefile1='prime.xls'   #设置存储prime网页数据的位置
savefile2='normal.xls'  #设置存储normal网页数据的位置

ua = UserAgent()# 代理池
q = queue.Queue()  # 存放被反爬之后待重爬的队列

# cookie的信息,也需要一个列表进行更换
cookie = {
   'session-id': '459-4568418-5692641', 'ubid-acbcn': '459-5049899-3055220',
          'x-wl-uid': '1AK7YMFc9IzusayDn2fT6Topjz3iAOpR3EeA2UQSqco8fo5PbK2aCpyBA/fdPMfKFqZRHc4IeyuU=',
          'session-token': 'OH1wPvfOj6Tylq2nnJcdn5wyxycR/lqyGsGU3+lUtU4mbC0ZD9s8/4Oihd1BlskUQG8zRbLVs9vfWXuiJmnRlDT4x35ircp2uLxOLNYQ4j5pzdFJIqqoZUnhHSJUq2yK80P3LqH8An7faXRCPW9BIqX1wu0WmHlSS9vYAPKA/2SGdV9b//EljYjIVCBjOuR/dKRiYEeGK3li0RJOVz7+vMWg7Rnzbx89QxlbCp0WyquZyVxG6f2mNw=="',
          'session-id-time': '2082787201l'}

# url头
url = 'https://www.amazon.com/dp/'
df = pd.read_excel(srcdata)
workbook1 = xlwt.Workbook(encoding='utf-8')
workbook2 = xlwt.Workbook(encoding='utf-8')
nm = beginNum
CRAWL_EXIT = False


# 自定义线程
class crawlThread(threading.Thread):
    def __init__(self, name, lock):
        threading.Thread.__init__(self)
        self.name = name
        self.lock = lock

    def run(self):
        global nm
        global CRAWL_EXIT
        global q
        
        selfnm=0
        count404 = 0
        primenum=0#prime网页数
        normalnum=0#normal网页数
        out = self.name
        worksheet1 = workbook1.add_sheet(out)
        worksheet2 = workbook2.add_sheet(out)
        temp=('asin','电影名', '时长', '上映年份', '导演', '演员', '类别', '语言', '格式','版本','制片方','用户评分')
        for i in range(12):
            worksheet1.write(0, i, temp[i])
            worksheet2.write(0, i, temp[i])
        self.lock.acquire()  # 获得锁
        workbook1.save(savefile1)
        workbook2.save(savefile2)
        self.lock.release()  # 释放锁
        while (CRAWL_EXIT != True):
            #电影名、时长、上映年份、导演、演员、类别、语言、格式、制片方、用户评分
            mtitle=""
            runtime=""
            release=""
            director=""
            actor=""
            genre=""
            language=""
            mformat=
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值