美文网首页
urllib网页数据抓取:get请求抓取小说数据

urllib网页数据抓取:get请求抓取小说数据

作者: fakeProgramer | 来源:发表于2023-01-08 22:44 被阅读0次
【目标】本文使用urllib尝试获取某本小说前100章的源码数据
语言:python
包:urllib

本文仅做学习交流使用!!!

练习网站:

星门网

分析网站的请求要求、请求的结构等

  1. 谷歌浏览器登录网站,进入开发者模式(页面右键“检查”);
  2. 查找network下所有的请求信息,不难发现有个2072590.html的请求包含了小说正文的内容(Response信息);
  3. 查询该记录的请求信息(Request Headers),能够获取:
    · 请求地址url(Request URL):
    · 请求方式:GET请求
    · 这是第一章的数据,按此方式检查第二章、第三章的请求,分析url地址发现只有最后2072590这个数字不同,即第二章(2072590+1),第三章(2072590+2)...以此类推。因此,我们可以构建一个range(100)的For循环,就能生成100个与章节对应的url请求网址。
  4. 接下来,查询该记录的请求头,看看要带哪些数据给请求网址才能获取到该信息。
    图片3.png
    需要带的数据好像有点多。经测试发现我们只把最后一个UA数据带上就能获取到正确响应,可能这个网站没什么反Pa措施。。因此构建本次的headers只用传入UA信息
  5. 分析工作完毕,接下来分几步敲码
    · 使用for循环构建出不同的url请求地址;
    · 使用urllib.request.Request()方法定制一个包含url和headers信息的请求对象;
    · 对请求对象分别发送请求指令,获取response信息;
    · 使用open()方法和编解码将每次响应回来的数据保存成新的html文件。

敲码时间

    import urllib.request
    import urllib.parse
    
    for data in range(100):
        url = f'https://www.xingmen.cc/29/29928/{data+2072590}.html'
        headers = {   # 通过刚才观察网页源码,发现request headers中的信息都是字典格式,因此要构建成字典
        # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        # 'Accept-Encoding': 'gzip, deflate, br',
        # 'Accept-Language': 'zh-CN,zh;q=0.9',
        # 'Cache-Control': 'max-age=0',
        # 'Connection': 'keep-alive',
        # 'Cookie': 'Hm_lvt_298d20c200aed9761d07ff247214636e=1673270466; Hm_lpvt_298d20c200aed9761d07ff247214636e=1673270466; bcolor=; font=; size=; fontcolor=; width=',
        # 'Host': 'www.xingmen.cc',
        # 'Referer': 'https://www.xingmen.cc/29/29928/',
        # 'sec-ch-ua': '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',
        # 'sec-ch-ua-mobile': '?0',
        # 'sec-ch-ua-platform': '"Windows"',
        # 'Sec-Fetch-Dest': 'document',
        # 'Sec-Fetch-Mode': 'navigate',
        # 'Sec-Fetch-Site': 'same-origin',
        # 'Sec-Fetch-User': '?1',
        # 'Upgrade-Insecure-Requests': '1',
        # 【经测试发现,注释掉这些参数也能获得正确的请求,只需将最关键的参数传给请求即可】
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        }
        request = urllib.request.Request(url=url, headers=headers)   # Request()方法定制请求对象,将url和headers打包进去
        response = urllib.request.urlopen(request)   # 使用urlopen触发请求对象,该对象包含了请求地址url和请求头信息headers
        content = response.read().decode('utf-8')    # read()获取响应结果,utf-8格式解码数据
        with open(file=f'D:\PyCharm 2021.3.2\codefile\爬虫练习\第{data+1}章.html', mode='wt', encoding='utf-8')as f:
            f.write(content)   # 使用wt写入模式创建新的html文件,将数据写入
            print(f'已保存第 {data+1}章。')   # range(100)从零开始,因此章节名是 data+1

效果如下

图片4.png
图片5.png

小结:

本次只获取了网页源码,还需要进一步提取数据的操作。提取数据有多种方式诸如xpath、正则等,以后会再分享出来。

相关文章

  • 2.模块简介

    其实学习爬虫也挺简单,主要就是三个步骤 1.抓取网页 2.分析网页3.保存数据 抓取网页urllib库urllib...

  • Python 正则表达式

    我们能够使用 urllib 向网页请求并获取其网页数据。但是抓取信息数据量比较大,我们可能需要其中一小部分数据。对...

  • 从零开始学爬虫—urllib

    其实学习爬虫也挺简单,主要就是三个步骤 1.抓取网页 2.分析网页 3.保存数据 抓取网页 urllib库 url...

  • Urllib 数据抓取

    Python3中是将Urllib2和Urllib3合并在一起使用,并命名为Urllib 发送请求 urllib.r...

  • Python 爬虫的工具列表 附Github代码下载链接

    这个列表包含与网页抓取和数据处理的Python库网络通用urllib -网络库(stdlib)。requests ...

  • 爬虫

    抓取网页1)直接抓取网页法 注意导入模块一定要写成urllib.request,urllib.parse等等。ur...

  • 8 个常用的Python爬虫技巧总结!

    1、基本抓取网页 get方法 import urllib2 url"http://www.baidu.com" r...

  • python爬虫常用第三方库

    这个列表包含与网页抓取和数据处理的Python库 网络 通用urllib -网络库(stdlib)。request...

  • Python 初学者的福利 爬虫的工具列表大全

    这个列表包含与网页抓取和数据处理的Python库。 网络 通用 urllib -网络库(stdlib)。 requ...

  • Wireshark抓包实战

    抓取某新闻客户端的数据 注意事项 在抓取数据之前先清除缓存,缓存会影响抓包 过滤get请求 通过ping命令获取新...

网友评论

      本文标题:urllib网页数据抓取:get请求抓取小说数据

      本文链接:https://www.haomeiwen.com/subject/pfascdtx.html