爬取需验证码登录的电影票房数据库,别篡改人家的数据啊!

本文分享了一次使用Python爬取电影票房数据的经历,重点介绍了如何处理网站的数学验证码及登录后的Cookies获取方法。文中提供了具体的代码实现,包括使用多线程加速数据抓取过程。

简单需求分析

由于练手所需,我们需要电影票房数据。

第一次做也没什么经验,就瞄准了电影票房数据库

 

 

 

 

上去之后才知道,人家要登录,登录带了数学验证码。

于是我们开始了。

 

 

获取这个消息之后呢,团队里的成员就开始议论了。

最终,一边觉得可以把验证码取下来填上去获取cookies,另一边觉得可以先登录再取cookies,当然他们都成功了。 唯独我用selenium去登录取cookies的爬下来是乱码。

代码实现

哎,我知道,大家点进来也不是为了看我哔哔哔的,基本都想说:赶紧放码过来!!!

以下代码出自团队成员TopTab

 

 

import requests
import re
from lxml import etree
import random
from concurrent.futures import ThreadPoolExecutor
import time

user_agent=[
# 请自己放上十几个头
]
#下面的cookie自己加,建议加多个
cookie=[]

list_urls=[]
def geturl(page):
    headers={
        'Cookie':random.choice(cookie),
        'User-Agent':random.choice(user_agent)
    }
    time.sleep(1)
    page = requests.get("http://58921.com/alltime?page={}".format(int(page)),headers=headers)
    html = page.content.decode(encoding='utf-8')
    with open("test.html",'wb') as f:
        f.write(html.encode())
    xpath_data=etree.HTML(page.content)
    list_urls_raw=xpath_data.xpath('//*[@id="content"]/div[3]/table/tbody/tr/td[3]/a/@href')
    # print(list_urls_raw)
    for url in list_urls_raw:
        list_urls.append(url)
    return list_urls


def get_number(url_half):
    headers={
        'User-Agent':random.choice(user_agent)        
    }
    Html=requests.get("http://58921.com"+url_half+"/boxoffice",headers).content.decode("utf-8")
    # print(Html)
    pattern_number = re.compile(r'\(最新票房 (.+?)\)')
    pattern_name=re.compile(r'<h3 class="panel-title">(.*)票房统计\(.*\)</h3>')
    # print(pattern)
    number=pattern_number.findall(Html)[0]
    name=pattern_name.findall(Html)[0]
    print(number,name)
    return number,name

with ThreadPoolExecutor(max_workers=2) as executor_first:
    for i in range(1,30): # 要几页自己调
        executor_first.submit(geturl,i)
print(list_urls)
print(len(list_urls))
with ThreadPoolExecutor(max_workers=2) as executor_second:
    executor_second.map(get_number,list_urls)

然后这个cookies哪里取呢?由于我一直取不到正确的cookies,所以导致效果一直无法复现,这里帮你们把这个问题解决了。

 

 

 

晓得咯?

 

后记

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值