python爬取站_python爬取某站磁力链
不同磁力链网站网页内容都不同,需要定制
1,并发爬取
并发爬取后,好像一会就被封了
import requests
from lxml import etree
import re
from concurrent.futures import ThreadPoolExecutor
def get_mlink(url, headers):
"""输入某影片磁力链所在的网页,返回该网页中的磁力链"""
r = requests.get(url, headers=headers)
select = etree.HTML(r.text)
try:
magnetlink = select.xpath('//textarea[@id="magnetLink"]//text()')
return magnetlink[0]
except AttributeError:
return None
def get_page_mlinks(url, headers):
"""输入某一页搜索结果,返回该网页中所有的元组(url, 影片大小,时间,磁力链)"""
r = requests.get(url, headers=headers)
select = etree.HTML(r.text)
div_rows = select.xpath('//div[@class="row"]')
def get_each(se):
size = se.xpath('.//div[@class="col-sm-2 col-lg-1 hidden-xs text-right size"]//text()')
date = se.xpath('.//div[@class="col-sm-2 col-lg-2 hidden-xs text-right date"]//text()')
href = se.xpath('.//a/@href')
try:
return href[0], size[0], date[0], get_mlink(href[0], headers)
except IndexError:
pass
with ThreadPoolExecutor() as executor: # 并发执行爬取单个网页中所有的磁力链
res = executor.map(get_each, div_rows)
return res
def get_urls(baseurl, headers, suffix=None):
"""输入搜索网页,递归获取所有页的搜索结果"""
if suffix:
url = baseurl + suffix
else:
url = baseurl
r = requests.get(url, headers=headers)
select = etree.HTML(r.text)
page_suffixes = select.xpath('//ul[@class="pagination pagination-lg"]'
'//li//a[@name="numbar"]/@href')
# 有时该站会返回/search/.../search/...search/.../page,需要处理下
p = r'/search/[^/]+/page/\d+(?=\D|$)'
page_suffixes = [re.search(p, i).group() for i in page_suffixes]
# 如果还有下一页,需要进一步递归查询获取
r = requests.get(url + page_suffixes[-1], headers=headers)
select = etree.HTML(r.text)
next_page = select.xpath('//ul[@class="pagination pagination-lg"]'
'//li//a[@name="nextpage"]/@href')
if next_page:
page_suffixes = page_suffixes + get_urls(baseurl, headers, next_page[0])
return page_suffixes
if __name__ == '__main__':
keyword = "金刚狼3"
baseurl = 'https://btsow.club/search/{}'.format(keyword) # 该站是采用get方式提交搜索关键词
headers = {"Accept-Language": "en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4"}
urls = get_urls(baseurl, headers)
new_urls = list(set(urls))
new_urls.sort(key=urls.index)
new_urls = [baseurl + i for i in new_urls]
with ThreadPoolExecutor() as executor:
res = executor.map(get_page_mlinks, new_urls, [headers for i in range(7)])
for r in res:
for i in r:
print(i)
2,逐页爬取
手工输入关键词和页数
超过网站已有页数时,返回None
爬取单个搜索页中所有磁力链时,仍然用的是并发
import requests
from lxml import etree
from concurrent.futures import ThreadPoolExecutor
def get_mlink(url, headers):
"""输入某影片磁力链所在的网页,返回该网页中的磁力链"""
r = requests.get(url, headers=headers)
select = etree.HTML(r.text)
try:
magnetlink = select.xpath('//textarea[@id="magnetLink"]//text()')
return magnetlink[0]
except AttributeError:
return None
def get_page_mlinks(url, headers):
"""输入某一页搜索结果,返回该网页中所有的元组(url, 影片大小,时间,磁力链)"""
r = requests.get(url, headers=headers)
select = etree.HTML(r.text)
div_rows = select.xpath('//div[@class="row"]')
def get_each(se):
size = se.xpath('.//div[@class="col-sm-2 col-lg-1 hidden-xs text-right size"]//text()')
date = se.xpath('.//div[@class="col-sm-2 col-lg-2 hidden-xs text-right date"]//text()')
href = se.xpath('.//a/@href')
try:
return href[0], size[0], date[0], get_mlink(href[0], headers)
except IndexError:
pass
with ThreadPoolExecutor() as executor: # 并发执行爬取单个网页中所有的磁力链
res = executor.map(get_each, div_rows)
return res
if __name__ == '__main__':
keyword = input('请输入查找关键词>> ')
page = input('请输入查找页>> ')
url = 'https://btsow.club/search/{}/page/{}'.format(keyword, page)
headers = {"Accept-Language": "en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4"}
r = get_page_mlinks(url, headers)
for i in r:
print(i)
3,先输入影片,在选择下载哪个磁力链
import requests
from lxml import etree
def get_mlink(url, headers):
"""输入某影片磁力链所在的网页,返回该网页中的磁力链"""
r = requests.get(url, headers=headers)
select = etree.HTML(r.text)
try:
magnetlink = select.xpath('//textarea[@id="magnetLink"]//text()')
return magnetlink[0]
except AttributeError:
return None
def get_row(row):
size = row.xpath('.//div[@class="col-sm-2 col-lg-1 hidden-xs text-right size"]//text()')
date = row.xpath('.//div[@class="col-sm-2 col-lg-2 hidden-xs text-right date"]//text()')
href = row.xpath('.//a/@href')
title = row.xpath('.//a/@title')
try:
return href[0], size[0], date[0], title[0]
except IndexError:
pass
if __name__ == '__main__':
headers = {"Accept-Language": "en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4"}
while True:
keyword = input('请输入查找关键词>> ')
if keyword == 'quit':
break
url = 'https://btsow.club/search/{}'.format(keyword)
r = requests.get(url, headers=headers)
print(r.status_code)
select = etree.HTML(r.text)
div_rows = select.xpath('//div[@class="row"]')
div_rows = [get_row(row) for row in div_rows if get_row(row)]
if not div_rows:
continue
for index, row in enumerate(div_rows):
print(index, row[2], row[1], row[3])
# 选择和下载哪部片子
choice = input('请选择下载项>> ')
try: # 如果不是数字,退回到输入关键词
choice = int(choice)
except ValueError:
continue
download_url = div_rows[choice][0]
mlink = get_mlink(download_url, headers)
print(r.status_code)
print(mlink)
print('\n\n')
执行效果:
4,补充下lxml的使用
*************************************************************
临河位置,全明户型带边窗,满五年唯一,拎包入住
御桥
/
2室1厅
/
50.11平米
/
南
/
精装
python爬取站_python爬取某站磁力链相关推荐
- python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密
现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...
- python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析
上一次分享了使用matplotlib对爬取的豆瓣书籍排行榜进行分析,但是发现python本身自带的这个绘图分析库还是有一些局限,绘图不够美观等,在网上搜索了一波,发现现在有很多的支持python的绘图 ...
- python制作手机壁纸_Python爬取手机壁纸图片
使用Python爬取图片. 1 说明 本文通过爬虫程序的编写,实现了一个简单易懂的爬虫程序,方便初学者理解,主要程序分为网页获取函数,以及保存下载函数,这就是所有爬虫程序的基本思想.(本文不涉及反爬, ...
- python微信爬取教程_python爬取微信文章方法
本文给大家分享的是使用python通过搜狗入口,爬取微信文章的小程序,非常的简单实用,有需要的小伙伴可以参考下 本人想搞个采集微信文章的网站,无奈实在从微信本生无法找到入口链接,网上翻看了大量的资料, ...
- python动态爬取实时_python爬取动态数据实战---猫眼专业版-实时票房(二)
学习python进行简单的数据爬取(基于python 3.x).再进行数据页面解析之后,使用scrapy框架进行爬取数据.没有实现自己预想的效果,着实是自己能力有限,无法灵活使用该框架.就使用自己的办 ...
- python微博爬虫分析_python爬取和分析新浪微博(一):scrapy构建新浪微博榜单、博主及微博信息爬虫...
1. 爬虫项目介绍 爬虫首先基于python scrapy 框架,使用了随机用户代理和IP代理等反爬技巧,将爬取到的微博领域数据,各领域榜单博主信息和博主的微博信息分别存入的mysql数据库对应的表格 ...
- python爬取评论_Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
### 1. 需求说明 本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件.然后对影评进行分词分析,使用词云生成树人格鲁特的形象照片. ### 2. 代码实现 此部 ...
- python爬取流浪地球_python爬取《流浪地球》获十几万评论点赞,超给力!
原标题:python爬取<流浪地球>获十几万评论点赞,超给力! 我自己到现在其实还没看这部电影,毕竟这电影这么火,电影院现在都很难买到好的位置.所以我打算不如先看看大家是怎么评价这部电影的 ...
- python爬取流浪地球_python爬取《流浪地球》16w评论
今年春节档电影<流浪地球>火的不要不要,截止到今天 2 月 17 日,上映 13 天,目前票房已达 36 亿,可喜可贺. 我自己到现在其实还没看这部电影,毕竟这电影这么火,电影院现在都很难 ...
最新文章
- Visual Studio 2005 IDE 技巧和窍门
- Java class.forname 功能介绍
- 数据库密码爆破HexorBase
- Linux命令学习-mv命令
- Python 排序 -- sort()、sorted()
- tengine安装问题
- GluonCV 升级0.8版,引入深度估计、助力街景分析
- 入侵linux_入侵Linux计算机以获得更好的聆听体验
- defaultcharacterset mysql_C# .Net+MySQL组合开发Character set ‘gbk’ is not supported的解决方法...
- jQuery学习笔记--JqGrid相关操作 方法列表(上)
- 软件需求分析--结构化分析(SA)方法[1]
- ros重置后地址_RouterOS中BGP软重新配置 - ROS软路由论坛 - ROS教程 - RouterOS - ROS之家 - ROS脚本生成器 - Powered by Discuz!...
- 阿里出品的在线图表制作工具
- NSA网络武器被公开,面对突发性的高危漏洞事件,我们应该如何应对?
- html的strong标签是什么意思,Strong标签和B标签怎么用?区别有哪些
- pubwin修改服务器时间,如何解决控制台打开(Pubwin)提示服务器没有启动或者服务器IP地址改变问题...
- 获取商品数据 API(商品详情、商品主图)
- bootstrap 轮播插件
- AI赐子?!学习数百万个胚胎发育过程,算法可将试管婴儿成功率提高3倍
- ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图视觉映射散点(气泡)组件【4】 - 广东省