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://*网站url*/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.pw/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)

 

转载于:https://www.cnblogs.com/guxh/p/10702472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某公司招标信息的方式有很多种,以下是一种基于 Python方式: 1. 分析目标网的页面结构和数据接口,找到需要的信息所在的 URL 和参数; 2. 使用 Python 的 requests 模块向目标 URL 发送网络请求,并添加合适的请求头信息; 3. 解析返回的 HTML 或 JSON 数据,提出所需的信息; 4. 将提的信息存储到本地文件或数据库中。 以下是一个简单的示例代码,以某公司最新的招标公告为例: ```python import requests from bs4 import BeautifulSoup # 目标网的 URL 和参数 url = 'https://www.example.com/bid/list' params = {'page': 1, 'size': 10, 'sort': 'createTime,desc'} # 发送网络请求并获响应 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, params=params, headers=headers) # 解析 HTML 并提信息 soup = BeautifulSoup(response.text, 'html.parser') items = soup.select('.bid-item') for item in items: title = item.select_one('.bid-item-title').text.strip() pub_time = item.select_one('.bid-item-time').text.strip() print(title, pub_time) # 存储信息到本地文件或数据库中 # ... ``` 该示例代码中,使用 requests 模块发送 GET 请求,并添加了 User-Agent 请求头信息,以模拟浏览器访问。使用 BeautifulSoup 库解析返回的 HTML 数据,并通过 CSS 选择器提出招标公告的标题和发布时间。最后,可将提的信息存储到本地文件或数据库中,以备后续分析和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值