我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python利用requests和thr

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python利用requests和thr

  利用爬到的数据,基于Django搭建的一个最新电影信息网站:

   n1celll.xyz

  今天想利用所学知识来爬取电影天堂所有最新电影信息,用到的模块:

    requests:用于获取网页信息

    re:获取网页中具体想要的信息

    Beautifulsoup:便于标签搜索,获取想要信息

    threading:使用多线程大幅度缩短爬取时间

    queue:使用线程队列来写入文件(实际上我是把数据全部存入了数据库)

    大概差不多就这些模块。

欢迎各位大牛指点。

# Author : 'n1celll'
import requests
import json
import re
from bs4 import BeautifulSoup
import threading
import queue,time

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

url = 'http://www.ygdy8.net/html/gndy/dyzz/index.html'

def get_page(url):
    index = requests.get(url, headers=header)
    index.enconding = 'GBK'# 将编码转为与HTML一致
    t = index.text
    index_soup = BeautifulSoup(t, 'html.parser')# 将获得的网页信息 转成soup对象
    all_pages = index_soup.find('select', attrs={'name': 'sldd'}).find_all('option')[-1] # 获得总页数
    page = int(all_pages.string)
    return page

def get_data(page):

    page_url = 'http://www.ygdy8.net/html/gndy/dyzz/list_23_%s.html' % (page)  # 获取每一页数据
    print(page)
    # page_url = 'http://www.ygdy8.net/html/gndy/dyzz/list_23_30.html'
    res = requests.get(page_url, headers=header)
    res.encoding = 'GBK'  # 'gb2312'
    a = res.text
    soup = BeautifulSoup(a, 'html.parser')
    name = soup.find_all('a', attrs={'class': 'ulink'})
    # print(name)测试
    for i in name:
        try:
            moive_name = re.search('《(.*?)(》|】)', i.string).group()
            # 有两个坑,这个里面有个电影名字不是用的书名号,还有一个电影有两个a标签
        except:
            continue
        html = 'http://www.ygdy8.net' + i['href']
        da = requests.get(html, headers=header)
        da.encoding = 'GBK'  # da.apparent_encoding
        db = da.text
        # f = open('test2.txt','w',encoding='utf8')
        # f.write(a.text)
        # f.close()
        dr = BeautifulSoup(db, 'html.parser')
        span = dr.find('span', attrs={'style': 'FONT-SIZE: 12px'})
        if span:
            dc = span.text.split()

            data = ''
            for i in dc:
                data += i
            print(data)
            msg = {}
            if data:
                msg['mname'] = moive_name
                try:
                    show_t = re.search(r'(?<=(◎年代|◎时间|品年代|年代】|播时间|播】:))(.*?)(?=◎|年|【)', data).group()
                except:
                    show_t = re.search(r'(?<=日期|份:)(.*?)(?=(-|剧))', data).group()
                msg['mtime'] = show_t
                try:
                    country = re.search(r'(?<=(◎国家|◎产地|◎地区|◎国别|国家】))(.*?)(?=◎|【类)', data).group()
                except:
                    try:
                        country = re.search(r'(?<=地区)(.*?)(?=语言)', data).group()
                    except:
                        country = '未知'
                msg['mcountry'] = country
                try:
                    time = re.search(r'(?<=◎片长|长度】)(.*?)(?=◎|【)', data).group()
                except:
                    time = '未知'
                msg['mtime'] = time
                try:
                    mtype = re.search(\
                        r'(?<=(◎类别|别类型|影类型|◎类型|集类型|◎分类|类型:|类别】|片类型|型】:))(.*?)(?=(◎|级别|【出品|【主演))', \
                        data).group()
                except:
                    try:
                        mtype = re.search(r'(?<=类型:)(.*?)(?=国)', data).group()
                    except:
                        mtype = re.search(r'动作|爱情|战争', data).group()
          #以上的正则表达式,感觉用的很笨拙,希望有技术大牛提点建议
                # with open('test4.txt','a+',encoding='utf8') as f:测试
                #     f.write('%s: %s,%s,%s,%s\n' % (moive_name, country, mtype, time, show_t))测试
                q.put('%s: %s,%s,%s,%s,%s\n' % (moive_name, country, mtype, time, show_t,html))

q = queue.Queue(maxsize=10000)
t_obj = []
lock = threading.Lock()#加上线程锁
# semaphore = threading.BoundedSemaphore(200)
def writing(f):
    # semaphore.acquire()
    data = q.get()
    lock.acquire()
    f.write(data)
    lock.release()
    # semaphore.release()
        # if not q.get():
        #     f.close()
        #     break
    # print('写入完成')
all_page = get_page(url)
f = open('test4.txt', 'w', encoding='utf8')
print(all_page+1)

for i in range(1,all_page+1):
    t = threading.Thread(target=get_data,args=(i,))
    t.start()
    t_obj.append(t)
for t in t_obj:
    t.join()#保证所有线程结束后开始写入
    print('%s over'%t)

while q.qsize():#判断队列里面是否还有元素
    w = threading.Thread(target=writing, args=(f,))
    w.start()
    w.join()
else:
    print('写入完成')

  

    

  

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python利用requests和thr

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python利用requests和thr

利用爬到的数据,基于Django搭建的一个最新电影信息网站:   n1celll.xyz  今天想利用所学知识来爬取电影天堂所有最新电影信息,用到的模块:    requests:用于获取网页信息    re:获取网页中具体想要的信息   
2023-01-31

python利用requests模拟ht

一、通过requests发送请求之前一直使用urllib以及urllib2模拟http请求发送,在实际场景中,我们需要造自己定义好的header、body等等,使用urllib很麻烦,很偶然的机会,接触到了requests,可以通过发送xm
2023-01-31

python: 爬虫利器requests

requests并不是系统自带的模块,他是第三方库,需要安装才能使用闲话少说,来,让我们上代码:简单的看一下效果:import requestsrequests = requests.session()headers = { 'Use
2023-01-31

python的requests库和url

python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,request
2023-01-31

怎么在python中利用requests检查请求

怎么在python中利用requests检查请求?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python有哪些常用库python常用的库:1.requesut
2023-06-14

怎么在python中利用requests发送请求

这篇文章给大家介绍怎么在python中利用requests发送请求,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通
2023-06-14

怎么在python中利用Selenium+Requests爬取数据

本篇文章给大家分享的是有关怎么在python中利用Selenium+Requests爬取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的数据类型有哪些?pyth
2023-06-14

利用requests和正则表达式爬取虎扑

正则表达式解释:符合某个模式(规则)的文本在线测试工具:https://tool.oschina.net/regex详细的正则表达式规则,可见:http://www.runoob.com/python3/python3-reg-expres
2023-01-31

python爬虫怎么利用requests制作代理池s

本篇内容介绍了“python爬虫怎么利用requests制作代理池s”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  爬取代理然后验证代理,
2023-06-02

python requests 高级用法

本篇文档涵盖了 Requests 的一些高级特性。 会话对象会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 
2023-01-31

python requests用法总结

python requests用法总结requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。可以说,Requests 完全满足如今网络的需求本文全部来源于官方文档:   http://doc
2023-01-31

Python中urllib库和requests库区别

本篇内容主要讲解“Python中urllib库和requests库区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中urllib库和requests库区别”吧!一、前言在使用Pyt
2023-06-15

python爬虫入门教程--利用requests构建知乎API(三)

前言 在爬虫系列文章 优雅的HTTP库requests 中介绍了 requests 的使用方式,这一次我们用 requests 构建一个知乎 API,功能包括:私信发送、文章点赞、用户关注等,因为任何涉及用户操作的功能都需要登录后才操作,所
2022-06-04

Python之requests的使用(二)

上一篇我们说了requests的简单用法,知道了如何发送请求,今天我们更深层次的来学习requests。我们看看高级一点的操作,比如讲文件上传,cookies设置,代理设置之类的。感兴趣的同学可以参考阅读
2023-05-15

python requests post如何使用

本篇内容主要讲解“python requests post如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python requests post如何使用”吧!python模拟浏览器发送p
2023-07-05

Python之requests如何使用

本篇内容介绍了“Python之requests如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.文件上传我们知道requests可以
2023-07-06

Python之requests的使用(一)

requests是一个很实用的PythonHTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多,这篇文章主要介绍requests的基础用法
2023-05-15

Python requests模块怎么使用

本文小编为大家详细介绍“Python requests模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python requests模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.准备工
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录