首页 > 编程语言 >python3爬取CSDN个人所有文章列表页

python3爬取CSDN个人所有文章列表页

时间:2022-10-04 17:00:32浏览次数:51  
标签:xpath url list 爬取 item CSDN article page python3

前言

我之前写了下载单篇文章的接口函数,结合这篇写的,就可以下载所有个人的所有文章了

代码实现

  1. 没什么技术含量就是简单的xpath处理,不过有意思的是有一位csdn员工将自己的博客地址写到源码里面了,是一个隐藏的div, 不过在代码中我已经给过滤掉了。
  2. 优化了响应时长,毕竟需要分页爬去,如果不用多线程响应时间必然会随着文章分页的增多而增多。
  3. 传递了一个列表给各个的线程,多线程共用一个列表,但是我没给列表访问的时候加锁,我认为没有删除列表中的元素的情况下,列表中的数据不会损失的,只不过添加顺序是变化的(如果这条想法不对,请评论大神一定要给我解答一下),最后根据更新文章时间重新对各个文章进行排序(捞干的就是一个列表中包含多个字典,要求根据字典指定的键值进行字典的排序),用到了opertor这个库

代码实现

import requests
from lxml import etree
import re
import threading
import operator


def get_page(url):
response = requests.get(url)
all_page = int(re.findall('var listTotal = (.*?) ;',response.text)[0])//20 +1
return all_page


def parse_article(url,article_list):
response = requests.get(url).text
x = etree.HTML(response)
x= x.xpath('//div[(@class="article-item-box csdn-tracking-statistics")][not(@style="display: none;")]')
# article_list = []

for item in x:
title = item.xpath('h4/a/text()')[1].strip()
url = item.xpath('h4/a/@href')[0]
pubdata = item.xpath('div[@class="info-box d-flex align-content-center"]/p/span[@class="date"]/text()')[0]
pageviews = item.xpath('div[@class="info-box d-flex align-content-center"]/p[3]/span/span/text()')[0]
comments = item.xpath('div[@class="info-box d-flex align-content-center"]/p[5]/span/span/text()')[0]
article = dict(
title = title,
url = url,
pubdata = pubdata,
pageviews = pageviews,
comments = comments
)
article_list.append(article)
# print(article_list)

def main(url):
main_url = url
all_page = get_page(url)
thread_list = []
data = []
for page in range(1,all_page+1):
url = main_url + '/article/list/' + str(page)
t = threading.Thread(target=parse_article,args=(url,data))
t.start()
thread_list.append(t)

for t in thread_list:
t.join()

data.sort(key=operator.itemgetter('pubdata'))
print(data,len(data))

if __name__ == '__main__':
url =
main(url)

作者:​​Hello_wshuo​​​


标签:xpath,url,list,爬取,item,CSDN,article,page,python3
From: https://blog.51cto.com/u_13589616/5731391

相关文章

  • 大麦网演唱会信息爬取
    main.pyfromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWa......
  • 给女朋友写的一个利用搜索引擎爬取会议论文的脚本
    importbs4,requests,osfrommultiprocessingimportManager,Pool#红色:报错defR(message):return"\033[1;91m{}\033[0;m".format(message)#绿色:成功defG......
  • python3 ./gen_ldc_version_info.py > utils/ldc_version_info_.d make: *** [utils/
     001、问题  002、解决方法wget-chttps://github.com/ldc-developers/ldc/releases/download/v1.30.0/ldc2-1.30.0-linux-x86_64.tar.xztar-xJvfldc2-1.30.......
  • C++ CMake 使用 Python3
    C++CMake使用Python3CMakeListst设置#如果使用的是非系统目录下的Python可以通过指定Python3_ROOT_DIR改变查找路径#set(Python3_ROOT_DIR"${CMAKE_SOURCE_D......
  • Python3安装psutil报错
    报错:pip3installpsutilcompilationterminated.error:command'gcc'failedwithexitstatus1解决:yuminstallpython3-devel继续安装:[root@centos......
  • Python3
    实例一:importdatetime#定义一个列表mot=["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。","今天星期二:\n含泪播种的人一定能笑着收获。","......
  • 解决csdn强制关注博主才能阅读文章
    问题有的时候查阅资料的时候,关注博主并不是很方便,查csdn会出现下面的提示解决办法打开控制台输入以下代码:vararticle_content=document.getElementById("article_con......
  • Python3 字典 items() 方法
    描述:Python字典items()方法以列表返回视图对象,是一个可遍历的key/value对。dict.keys()、dict.values()和dict.items()返回的都是视图对象(viewobjects),提供了字典实......
  • Python3 range() 函数用法
    Python3range()函数返回的是一个可迭代对象(类型是对象),而不是列表类型,所以打印的时候不会打印列表。Python3list()函数是对象迭代器,可以把range()返回的可迭代对象转为......
  • python爬取黑马网站
         ......