爬取Discuz!社区的教程标题-史上最详细解析(实现分页)

摘要:本文记录了爬取Discuz!社区的教程标题的详细过程,过程清晰

  • 这是O的第一篇博客,如有排版问题请大佬见谅,O非常希望大佬能在评论区给出宝贵的意见共同进步
  • 经过千辛万苦终于实现了自己的第一个爬虫,以此纪念一下

总代码

import requests
from lxml import etree
class Disspider:
#获取头部及开始url
def __init__(self):
self.start_url = "https://www.discuz.net/portal.php?mod=list&catid=8&page={}"
self.headers = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Mobile Safari/537.36"}
#构建url列表
def get_url_list(self):
url_list=[]
for i in range(19):
url_list.append(self.start_url.format(i+1))
return url_list
#获取所需要的信息
def spider_information(self,url):
resp = requests.get(url,headers=self.headers).content
html=etree.HTML(resp)
result=html.xpath('//p[@class="wz_tits"]/text()')
return result
#保存数据
def save(self,result):
#'a'表示循环写入不覆盖之前写的内容
with open('text.txt','a',encoding='utf-8') as f:
#此时result为列表,write函数只能接收字符串类型的数据
for i in result:
f.write("\n"+i)
#主逻辑函数
def run(self):
url_list=self.get_url_list()
for url in url_list:
result=self.spider_information(url)
self.save(result)
if __name__ == '__main__':
disspider=Disspider()
disspider.run()

分函数解析

从上至下数的第一个函数:

#self作用类似于指针
def __init__(self):
#self.start_url表示起始url地址(即第一页地址),因为要实现分页所以page后是大括号不写死,留给构建url_list列表函数来填充page
self.start_url = "https://www.discuz.net/portal.php?mod=list&catid=8&page={}"
#写self.headers主要是为了模拟浏览器欺骗服务器,获取和浏览器一致的内容
#如果需要也可以加cookie来帮忙反反爬,不过此处不需要,当然因为cookie往往和一个用户对应,请求太快,容易被服务器识别为爬虫,故不需要cookie时
#尽量不要用cookie
self.headers = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Mobile Safari/537.36"}

第二个函数:

 #构建url列表
def get_url_list(self):
url_list=[]
#Discuz!社区的教程我写这个爬虫时是一个19页,故直接用for循环来构建url_list列表
for i in range(19):
#字符串的format方法,实现格式化,基本语法是通过 {} 和 : 来代替以前的 %,
url_list.append(self.start_url.format(i+1))
#这时在第一个函数写的start_url中的{}以被填充完毕,形成了19页对应的19个url写入url_list列表中,再return
return url_list

第三个函数:

 #获取所需要的信息
def spider_information(self,url):
#获取响应内容,resp.content返回的字节流数据
resp = requests.get(url,headers=self.headers).content
#此为lxml的etree用法,能更好的发挥xpath的作用
html=etree.HTML(resp)
#这个xpath路径为标题路径,如果需要爬取其他东西例如发布时间等直接替换xpath路径就好
result=html.xpath('//p[@class="wz_tits"]/text()')
return result

第四个函数:

#保存数据
def save(self,result):
#'a'表示循环写入不覆盖之前写的内容
with open('text.txt','a',encoding='utf-8') as f:
#此时result为列表,write函数只能接收字符串类型的数据
for i in result:
#为了输出在不同的行上在前面加上换行符,方便阅读
f.write("\n"+i)

第五个函数:

#主逻辑函数,实现之前的函数调用,类似于c语言的main函数
def run(self):
#构建url_list列表
url_list=self.get_url_list()
#取出url_list列表里的每一个url进行下一步操作
for url in url_list:
#获取想要的数据
result=self.spider_information(url)
#保存
self.save(result)

第六个函数:

#主要功能是让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行
if __name__ == '__main__':
#该语句O理解为
disspider=Disspider()
disspider.run()

fighting!,一起成长(^^)

爬取Discuz!社区的教程标题的更多相关文章

  1. 利用Python网络爬虫爬取学校官网十条标题

    利用Python网络爬虫爬取学校官网十条标题 案例代码: # __author : "J" # date : 2018-03-06 # 导入需要用到的库文件 import urll ...

  2. 学以致用:Python爬取廖大Python教程制作pdf

    当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个想法. 想要把教程变成PDF有三步: 先生成空html,爬取每一篇教程放进一个新生成的div,这样就 ...

  3. python制作爬虫爬取京东商品评论教程

    作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计图表,非常的细致,有需要的小伙伴可以参考下 ...

  4. 爬取知乎热榜标题和连接 (python,requests,xpath)

    用python爬取知乎的热榜,获取标题和链接. 环境和方法:ubantu16.04.python3.requests.xpath 1.用浏览器打开知乎,并登录 2.获取cookie和User—Agen ...

  5. 适合初学者的Python爬取链家网教程

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TinaLY PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  6. CVPR顶会论文爬取存入MySQL数据库(标题、摘要、作者、PDF链接和原地址)

    main.py import pymysql import re import requests # 连接数据库函数 from bs4 import BeautifulSoup def insertC ...

  7. 爬取知名社区技术文章_items_2

    item中定义获取的字段和原始数据进行处理并合法化数据 #!/usr/bin/python3 # -*- coding: utf-8 -*- import scrapy import hashlib ...

  8. webmagic 爬取网页所有文章的标题时间作者和内容

    package com.ij34; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Page; import us.co ...

  9. 爬取知名社区技术文章_setting_5

    # -*- coding: utf-8 -*- # Scrapy settings for JobBole project # # For simplicity, this file contains ...

  10. 爬取知名社区技术文章_pipelines_4

    获取字段的存储处理和获取普通的路径 #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql import gevent import pym ...

随机推荐

  1. 研发日常踩坑-Mysql分页数据重复

    踩坑描述: 写分页查询接口,order by和limit混用的时候,出现了排序的混乱情况 在进行第N页查询时,出现与第一前面页码的数据一样的记录. 问题 在MySQL中分页查询,我们经常会用limit ...

  2. OI 模板合集

    update on 2023.10: 这篇博客的原本意义是 方便直接复制 / 快速复习,但部分原有代码存在本质错误,完全没有起到这个作用,故重构. 由于折叠代码块在某些 markdown 编辑器中不支 ...

  3. mac os 升级到13后,系统免密失败

    # sudo vim /etc/ssh/ssh_config # 添加以下内容 PubkeyAcceptedKeyTypes +ssh-rsa

  4. 如何通过Python代码旋转PDF页面

    前言 日常处理 PDF 文档时,我们时常会遇到页面颠倒.很难正常阅读或打印的情况. 在这种情况下,我们可以通过旋转页面来调整文档的方向.旋转时,也可以根据具体情况,选择顺时针或逆时针旋转特定的角度,以 ...

  5. Langchain-Chatchat项目:5.1-ChatGLM3-6B工具调用

      在语义.数学.推理.代码.知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在10B以下的基础模型中最强的性能.ChatGLM3-6B采用了全新设计的Prompt格式,除正常 ...

  6. 【腾讯云 HAI域探秘】探索AI绘画之路:利用腾讯云HAI服务打造智能画家

    前言 随着人工智能的飞速发展,AI在艺术创作领域的应用正经历着一场革命性的变革.在这个数字时代,腾讯云的高性能应用服务HAI(Hyper Application Inventor)为艺术家和创作者提供 ...

  7. C/C++ extern “C“ 的问题

    声明 文章中的部分代码引用来在: https://blog.csdn.net/u012234115/article/details/43272441 场景 今天在CSDN中看到了一篇关于 extern ...

  8. 操作PDF的方法

    PDF的内容提取.转换见上篇 PDF操作: 旋转 删除 合并 拆分 转成图片 导出内嵌资源图片 两页合并成一页 添加.去除密码 添加水印 PDF旋转某一页 var document = pdfView ...

  9. Java Stream中的API你都用过了吗?

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 在本教程中,您将通过大量示例来学习 Java 8 Stream API. Java 在 Java 8 中提供了一个新的附加 ...

  10. 【vue】【外包杯】jtl和html文件的区别

    ftl(freemaker) jsp(jstl) 举例:html ftl