会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132904个问题

from fake_useragent import UserAgent
import requests
from lxml import etree


# 发送请求类
class Downloader():
    def download(self,url):
        print(url)
        headers = {'User-Agent':UserAgent().chrome}
        resp = requests.get(url, headers = headers)
        if resp.status_code == 200:
            resp.encoding = 'utf-8'
            return resp.text

# 数据解析类
class Parser():
    def parse(self, html):
        e = etree.HTML(html)
        contents =[div.xpath('string(.)') for div in e.xpath('//div[@class="content"]')]
        urls = ['https://www.qiushibaike.com{}'.format(url) for url in e.xpath('//ul[@class="pagination"]/li/a/@href')]
        return contents, urls

# 数据保存类
class DataOutPut():
    def save(self, datum):
        with open('duanzi1.txt', 'a', encoding='utf-8') as f:
            for data in datum:
                f.write(data+'\n')


# URL管理器
class URLManager():
    def __init__(self):
        self.new_url = set()
        self.old_url = set()
    # 加入一个Url
    def add_new_url(self,url):
        if url is not None and url !='' and url not in self.old_url:
            self.new_url.add(url)
    # 加入多个Url
    def add_new_urls(self,urls):
        for url in urls:
            self.add_new_url(url)
    # 获取一个Url
    def get_new_url(self):
        url = self.new_url.pop()
        self.old_url.add(url)
        return url
    # 获取还有多少个Url要爬取
    def get_new_url_size(self):
        return len(self.new_url)
    # 获取是否还有Url要爬取
    def is_have_new_url(self):
        return self.get_new_url_size() > 0

# 调度器
class Scheduler():
    def __init__(self):
        self.downloader = Downloader()
        self.parser = Parser()
        self.data_out_put = DataOutPut()
        self.url_manager = URLManager()
    def start(self, url):
        self.url_manager.add_new_url(url)
        url = self.url_manager.get_new_url()
        html = self.downloader.download(url)
        datum, urls = self.parser.parse(html)
        self.data_out_put.save(datum)
        self.url_manager.add_new_url(urls)


if __name__ == '__main__':
    scheduler = Scheduler()
    url = 'https://www.qiushibaike.com/text/'
    scheduler.start(url)

老师您好!我这里出现这样的BUG请问怎么结局呀!

微信截图_20210604214118.png

Python 全系列/第十四阶段:Python 爬虫开发/爬虫反反爬- 20719楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 20720楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 20722楼
Python 全系列/第一阶段:Python入门/编程基本概念 20724楼

老师你好,在学es时看到一个很有意思的例子,具体见如下我自己写的代码:

<script>
        let url = 'http//www.imooc.com/course/list';
        let url1 = 'http//www.imooc.com/course/list?username=xm';
        let url2 = 'http//www.imooc.com/course/list?username=xm&';

        const addURLParam = (url, name, value) => {

            // url += url.includes("?") ? '&' : '?';
            //.substr(url.length - 1, 1)

            url += url.includes("?") ? '' && (url.substr(url.length - 1, 1).includes("?") ? '' : '&' && url.substr(url.length - 1, 1).includes("&") ? '' : '&') : '?';

            url += `${name}=${value}`;

            return url;
        };

        url = addURLParam(url, 'password', 'admin');
        console.log(url);

        url1 = addURLParam(url1, 'password', 'admin');
        console.log(url1);

        url2 = addURLParam(url2, 'password', 'admin');
        console.log(url2);
    </script>

做到这里我发现不管怎么该都实现不了最终的结果:


这是想要的结果:

图片.png



这是按照我自己的思路实现的结果

图片.png

我实现的思路就是:先使用includes方法判断url中是否包含?;如果包含?,再判断url最后一位字符串是不是?或&符号,是的话就拼接空字符串,否则就拼接&;如果不包含?,就拼接一个?。

但是我发现无论怎么设计、怎么改都不能实现最终想要的结果,想请你帮忙看看

WEB前端全系列/第七阶段:ECMAScript6新特性模块/ES6第一部分 20729楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask之Jinja2模版 20730楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637