最近发现有个电影下载网站叫做比特大雄,下了几部电影之后,打算写个爬虫把网站的电影信息都爬取下来。


一开始思路是这样的,从首页开始,解析首页的所有链接,如果这个链接是电影详情页的链接,就将其html解析成想要的电影信息,如果不是电影详情页的链接,就将其加入到待爬取的URL list里,等待后续继续从这个url的页面爬取更多的链接。


爬虫代码Version 1

直接给出代码如下(含注释):

import requests
import re
import time# 网站首页
base_url = r'https://www.btdx8.com/'# 爬取到的新url会继续加入到这个list里
total_url_list = [base_url]
# 存放已经爬取过的url
used_url_list = []
# 存放是电影详情页的url
movie_url_list = []# 从html文本中抓取url的正则表达式
url_reg = 'href="(https://.*?)"'
# 判断url是不是电影详情页url的正则表达式
movie_url_reg = 'https://www.btdx8.com/torrent/.*?html'while 1:# 取出url list中的第一个urlurl = total_url_list.pop(0)print('Current Url:', url)print()try:# 获取url的htmltext = requests.get(url).text# 从html中找到所有的url链接new_urls = re.findall(url_reg, text)# 如果是之前没出现过的url,将其放入到total_url_list用于后续继续爬取for n in new_urls:if n not in total_url_list + used_url_list + movie_url_list:total_url_list.append(n)used_url_list.append(url)# 如果当前url是电影详情页的链接,将其存入movie_url_listif re.match(movie_url_reg, url):movie_url_list.append(url)print('Current url succeed')time.sleep(0.1)except:print('Current url failed')print('Total: %s, Used: %s, Movie: %s' % (len(total_url_list), len(used_url_list), len(movie_url_list)))# 如果total_url_list已经为空了就停止循环if len(total_url_list) == 0:break
# 打印所有的movie url
print(movie_url_list)

这个代码肯定是有些问题的,比如total_url_list可能永远都不为空,循环无法停止,不过可以先跑一跑看看情况。结果我就发现,速度太慢了!因为决定将其改成多线程爬虫,欢迎继续阅读后续的此系列文章。

从0开始写一个多线程爬虫(1)相关推荐

  1. 从0开始写一个多线程爬虫(2)

    上一篇文章: 从0开始写一个多线程爬虫(1) 我们用继承Thread类的方式来改造多线程爬虫,其实主要就是把上一篇文章的代码写到线程类的run方法中,代码如下: import re import re ...

  2. python爬虫都能干什么用_5 行代码就能写一个 Python 爬虫

    欢迎关注我的公众号:第2大脑,或者博客:高级农民工,阅读体验更好. 摘要:5 行代码就能写一个 Python 爬虫. 如果你是比较早关注我的话,会发现我此前的大部分文章都是在写 Python 爬虫,前 ...

  3. 【直播】手把手带你 5 分钟写一个小爬虫,从入门到超神!

    在程序员界流传着这么一个顺口溜:爬虫玩得好,监狱进得早.数据玩得溜,牢饭吃个够--时不时还有 "XX 公司做违法爬虫,程序员坐牢" 的新闻爆出. 在看热闹的同时,很多人都会提出疑问 ...

  4. 用c语言写一个网络爬虫

    (同步个人博客 http://sxysxy.org/blogs/28 到csdn 写一个网络爬虫 写一个网络爬虫,来获取一个网站上感兴趣的信息. 最基本的模型 就是图.每个页面看作一个节点,若页面A有 ...

  5. 从0开始写一个小程序

    项目简介 从0开始写一个小程序,本来想写一个新闻类的程序,后来发现调用的聚合数据api每天只能访问100次,就换成豆瓣的了,直接用豆瓣的接口又访问不了,在网上查了一下,要把豆瓣的地址换成"h ...

  6. [从 0 开始写一个操作系统] 一、准备知识

    从 0 开始写一个操作系统 作者:解琛 时间:2020 年 8 月 29 日 从 0 开始写一个操作系统 一.准备知识 1.1 实现方案 1.2 gcc 1.2.1 AT&T 汇编基本语法 1 ...

  7. 详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,以及常见问题或注意事项解答,本文主要以匿名上位机为例,适合新手和小白

      本文主要内容:详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,帮助我们调节一些参数,比如电机PID的调节.波形融合等,以及在我们写通信协议的时候 ...

  8. 从0开始写一个播放器系列-开篇

    从0开始写一个播放器系列-开篇 阅读本系列博客所需要具备的知识: js, ts , canvas Api , DOM, webpack, 不懂也没有太大的关系, 我会捎带着写出来, 剩下的自行百度 第 ...

  9. 用Python写一个网络爬虫爬取网页中的图片

    写一个爬虫爬取百度贴吧中一个帖子图片 网址:壁纸 用谷歌浏览器的开发工具检查网页,可以发现其每一张图片都有如下格式 <img class="BDE_Image" src=&q ...

最新文章

  1. php将配置信息写入文件,Php写入配置文件的经典漏洞
  2. PHP的学习--解析URL
  3. Matlab与C/C++混合编程调用OpenCV
  4. RabbitMQ安装FAQ(接前面一篇)
  5. 活动目录AD 取用户过期时间accountExpires
  6. oracle 虚拟机安装mac os,oracle vm virtualbox虚拟机安装mac os x详细图解
  7. php5.2 zend解密,狐灵科技分享几款zend解密工具,可以解密zend5.2
  8. OpenCv图像处理之Mat类使用
  9. 62-Mybatis高级介绍
  10. 78㎡网络机房动环监控及告警方案
  11. bilibili缓存文件在哪里_简单使用Pyinstaller将Python文件打包为可执行性exe
  12. 不同windows服务器之间同步文件,WindowsServer2016配置DFS实现两个服务器之间文件同步...
  13. 【云原生】Kubernetes PDB(Pod Disruption Budget)介绍与简单使用
  14. 一种可能提高扫到“敬业福”概率的方法
  15. 【实战演练】快速获取容器VIPs,解决集群自动化测试难题
  16. 获取 连接本地手机热点 的 的具体IP和MAC地址(其他手机或电脑)
  17. 风云卫星数据的正确解锁方式
  18. 禅道管理工具的安装教程
  19. 有哪些好用的互联网数据抓取,数据采集,页面解析工具?
  20. java excel 字体_Java 在Excel单元格中应用一种/多种字体样式

热门文章

  1. 六边形热图:专治数据密集重叠无法查看!
  2. poj3133 Manhattan Wiring
  3. vue将qrcodejs生成的二维码下载到本地
  4. 自动化学计算机语言先学什么,要入门PLC编程 先搞清这5种专用语言
  5. Dplayer弹幕的获取和提交
  6. R语言try,tryCatch语句
  7. 选择最佳的WordPress活动日历插件
  8. 机器人布里茨哪个皮肤好看_蒸汽机器人皮肤特效,布里茨的皮肤介绍 看完就明白...
  9. 基于USB的运动控制平台及采集卡的设计
  10. (2019春)软件构造:雨课堂试卷(第6章)