不同磁力链网站网页内容都不同,需要定制

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的使用

*************************************************************

关注
375万

临河位置,全明户型带边窗,满五年唯一,拎包入住

御桥

/

2室1厅

/

50.11平米

/

/

精装

近地铁VR房源

近地铁VR房源

python爬取站_python爬取某站磁力链相关推荐

  1. python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  2. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析

    上一次分享了使用matplotlib对爬取的豆瓣书籍排行榜进行分析,但是发现python本身自带的这个绘图分析库还是有一些局限,绘图不够美观等,在网上搜索了一波,发现现在有很多的支持python的绘图 ...

  3. python制作手机壁纸_Python爬取手机壁纸图片

    使用Python爬取图片. 1 说明 本文通过爬虫程序的编写,实现了一个简单易懂的爬虫程序,方便初学者理解,主要程序分为网页获取函数,以及保存下载函数,这就是所有爬虫程序的基本思想.(本文不涉及反爬, ...

  4. python微信爬取教程_python爬取微信文章方法

    本文给大家分享的是使用python通过搜狗入口,爬取微信文章的小程序,非常的简单实用,有需要的小伙伴可以参考下 本人想搞个采集微信文章的网站,无奈实在从微信本生无法找到入口链接,网上翻看了大量的资料, ...

  5. python动态爬取实时_python爬取动态数据实战---猫眼专业版-实时票房(二)

    学习python进行简单的数据爬取(基于python 3.x).再进行数据页面解析之后,使用scrapy框架进行爬取数据.没有实现自己预想的效果,着实是自己能力有限,无法灵活使用该框架.就使用自己的办 ...

  6. python微博爬虫分析_python爬取和分析新浪微博(一):scrapy构建新浪微博榜单、博主及微博信息爬虫...

    1. 爬虫项目介绍 爬虫首先基于python scrapy 框架,使用了随机用户代理和IP代理等反爬技巧,将爬取到的微博领域数据,各领域榜单博主信息和博主的微博信息分别存入的mysql数据库对应的表格 ...

  7. python爬取评论_Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特

    ### 1. 需求说明 本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件.然后对影评进行分词分析,使用词云生成树人格鲁特的形象照片. ### 2. 代码实现 此部 ...

  8. python爬取流浪地球_python爬取《流浪地球》获十几万评论点赞,超给力!

    原标题:python爬取<流浪地球>获十几万评论点赞,超给力! 我自己到现在其实还没看这部电影,毕竟这电影这么火,电影院现在都很难买到好的位置.所以我打算不如先看看大家是怎么评价这部电影的 ...

  9. python爬取流浪地球_python爬取《流浪地球》16w评论

    今年春节档电影<流浪地球>火的不要不要,截止到今天 2 月 17 日,上映 13 天,目前票房已达 36 亿,可喜可贺. 我自己到现在其实还没看这部电影,毕竟这电影这么火,电影院现在都很难 ...

最新文章

  1. Visual Studio 2005 IDE 技巧和窍门
  2. Java class.forname 功能介绍
  3. 数据库密码爆破HexorBase
  4. Linux命令学习-mv命令
  5. Python 排序 -- sort()、sorted()
  6. tengine安装问题
  7. GluonCV 升级0.8版,引入深度估计、助力街景分析
  8. 入侵linux_入侵Linux计算机以获得更好的聆听体验
  9. defaultcharacterset mysql_C# .Net+MySQL组合开发Character set ‘gbk’ is not supported的解决方法...
  10. jQuery学习笔记--JqGrid相关操作 方法列表(上)
  11. 软件需求分析--结构化分析(SA)方法[1]
  12. ros重置后地址_RouterOS中BGP软重新配置 - ROS软路由论坛 - ROS教程 - RouterOS - ROS之家 - ROS脚本生成器 - Powered by Discuz!...
  13. 阿里出品的在线图表制作工具
  14. NSA网络武器被公开,面对突发性的高危漏洞事件,我们应该如何应对?
  15. html的strong标签是什么意思,Strong标签和B标签怎么用?区别有哪些
  16. pubwin修改服务器时间,如何解决控制台打开(Pubwin)提示服务器没有启动或者服务器IP地址改变问题...
  17. 获取商品数据 API(商品详情、商品主图)
  18. bootstrap 轮播插件
  19. AI赐子?!学习数百万个胚胎发育过程,算法可将试管婴儿成功率提高3倍
  20. ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图视觉映射散点(气泡)组件【4】 - 广东省

热门文章

  1. 时间序列(time serie)分析系列之ARIMA预测3.1
  2. GPT2中文模型本地搭建(二)
  3. Shell——quan——运算命令
  4. 浏览器 重定向 301 和 302 区别
  5. 301和302的区别
  6. 【Ubuntu 22.04 没有声音输出】
  7. 重新安装win10应用商店
  8. 超凡股份邮件服务器,《雪鹰领主》11月23日部分服务器数据互通公告
  9. margin:auto 与 margin:0 auto 区别
  10. js箭头函数/函数this指向