根据提供的文件信息,我们可以总结出以下几个关键的知识点: ### 一、网络爬虫与数据抓取 #### 1. 使用`requests`库抓取网页数据 在代码中,作者使用了Python中的`requests`库来获取简书网站的HTML源码。`requests`是一个非常常用的Python第三方库,用于发送HTTP请求。 ```python result = requests.get(url=url, headers=headers) ``` 这里通过`get`方法发起GET请求,并传递了URL和自定义的HTTP头部信息。其中,`headers`字典模拟了浏览器的行为,这样服务器更容易接受请求。获取到的数据通过`result.text`进行访问。 #### 2. 使用`lxml`解析HTML文档 为了从HTML中提取所需的信息,代码使用了`lxml`库中的`etree`模块。`lxml`是一个强大的XML/HTML解析器,提供了类似DOM的API和XPath支持。 ```python html = etree.HTML(result.text) li_lst = html.xpath('//ul[@class="note-list"]/li') ``` 这里首先将获取到的网页源码转换为`etree`对象,然后使用XPath表达式来选取页面中所有的`<li>`元素,这些`<li>`元素包含了文章标题、简介等信息。 #### 3. 数据处理 接下来,代码对选取到的每个`<li>`元素进行了处理,提取出每篇文章的关键信息,如标题、内容摘要、作者以及评论数量等。 ```python for li in li_lst: title = li.xpath('./div/a[1]/text()')[-1] content = li.xpath('./div/p[1]/text()')[-1].strip() author = li.xpath('./div[1]/div[1]/a[1]/text()')[-1].strip() replay = li.xpath('./div[1]/div[1]/a[2]/text()')[-1].strip() info.append([title, content, author, replay]) ``` 这些信息被存储在一个列表中,方便后续处理。 ### 二、数据存储 代码还涉及到了如何将抓取到的数据进行存储,以便进一步分析或展示。 #### 1. 使用`pandas`进行数据处理 `pandas`是Python中最常用的数据处理库之一,提供了DataFrame等高效的数据结构。在这里,作者利用`pandas`创建了一个DataFrame,并将之前提取的信息存储进去。 ```python data = pd.DataFrame(info) ``` #### 2. 将数据保存为CSV和Excel文件 ```python data.to_csv('./test.csv', header=False, index=False) data.to_excel('./text.xlsx', header=False, index=False) ``` 通过`to_csv`和`to_excel`方法可以轻松地将DataFrame保存为CSV或Excel格式的文件,这对于数据分析和报表制作来说是非常有用的。 ### 三、使用Selenium实现动态网页的抓取 #### 1. 初始化WebDriver 对于动态加载的网页,传统的`requests`和`lxml`可能无法完全抓取到所有的数据。此时,就需要用到Selenium这样的工具。它可以通过模拟浏览器行为来与JavaScript驱动的网页进行交互。 ```python driver = webdriver.Chrome(executable_path=r'C:\Users\小米帅哥\Desktop\chromedriver_win32\chromedriver.exe') ``` 这里指定了Chrome WebDriver的路径,初始化了一个WebDriver实例。 #### 2. 页面元素定位 Selenium提供了多种方法来定位页面上的元素,比如使用`find_elements_by_xpath`方法。 ```python #infos = driver.find_elements_by_xpath('//ul[@class="note-list"]/li') ``` 虽然这部分代码没有完整执行,但可以看出其目的是定位页面上所有包含文章信息的`<li>`元素。这与前面使用`lxml`的方式类似,但Selenium能够处理动态加载的元素。 #### 总结 通过以上分析,我们可以看到这个脚本主要实现了以下功能: - 使用`requests`发起HTTP请求并获取网页源码。 - 使用`lxml`解析HTML并提取关键信息。 - 使用`pandas`处理数据并将结果保存到文件中。 - 使用Selenium处理动态网页,虽然这部分代码未完全实现,但它展示了如何使用Selenium来与动态加载的网页进行交互。 这些技术点都是网络爬虫开发中的常见操作,对于初学者来说是非常有价值的实践案例。
"""
Created on Mon Dec 21 12:49:45 2020
@author: Yuka
"""
#######################异步加载####################
import requests
import re
import time
from lxml import etree
url = "https://www.jianshu.com/?seen_snote_ids%5B%5D=77501094&seen_snote_ids%5B%5D=78620448&seen_snote_ids%5B%5D=80324985&seen_snote_ids%5B%5D=81348233&seen_snote_ids%5B%5D=80348158&seen_snote_ids%5B%5D=81359718&seen_snote_ids%5B%5D=76671403&page=2"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'
}
result = requests.get(url=url,headers=headers)
html = etree.HTML(result.text)
li_lst = html.xpath('//ul[@class="note-list"]/li')
info = [["title","content","author","replay"]]
for li in li_lst:
title = li.xpath('./div/a[1]/text()')[-1]
content = li.xpath('./div/p[1]/text()')[-1].strip()
author = li.xpath('./div[1]/div[1]/a[1]/text()')[-1].strip()
replay = li.xpath('./div[1]/div[1]/a[2]/text()')[-1].strip()
info.append([title,content,author,replay])
print(info)
#######################存储#########################
data = pd.DataFrame(info)
data.to_csv('./test.csv',header=False,index=False)
data.to_excel('./text.xlsx',header=False,index=False)
######################selenium######################
import selenium
from lxml import etree
import time
from selenium import webdriver
import pandas as pd
url = "https://www.jianshu.com/?seen_snote_ids%5B%5D=77501094&seen_snote_ids%5B%5D=78620448&seen_snote_ids%5B%5D=80324985&seen_snote_ids%5B%5D=81348233&seen_snote_ids%5B%5D=80348158&seen_snote_ids%5B%5D=81359718&seen_snote_ids%5B%5D=76671403&page=2"
driver = webdriver.Chrome(executable_path=r'C:\Users\小米帅哥\Desktop\chromedriver_win32\chromedriver.exe')
driver.get(url)
# infos = driver.find_elements_by_xpath('//ul[@class="note-list"]/li')
# for info in infos:
# title = info.find_element_by_xpath('./div[1]/a[1]').text
# content = info.find_element_by_xpath('./div[1]/p[1]').text
# author = info.find_element_by_xpath('./div[1]/div[1]/a[1]').text
# replay = info.find_element_by_xpath('./div[1]/div[1]/a[2]')[1].text
# print(author+"\n"+title+"\n"+content+"\n",replay)
lst=[['title','author','content','repaly']]
author = driver.find_elements_by_xpath('//ul[@class="note-list"]/li/div[1]/div[1]/a[1]')
replay = driver.find_elements_by_xpath('//ul[@class="note-list"]/li/div[1]/div[1]/a[2]')
title = driver.find_elements_by_xpath('//ul[@class="note-list"]/li/div[1]/a[1]')
content = driver.find_elements_by_xpath('//ul[@class="note-list"]/li/div[1]/p[1]')
for i in range(len(replay)):
lst.append([title[i].text,author[i].text,content[i].text,replay[i].text])
data = pd.DataFrame(lst)
data.to_csv('./test.csv',header=False,index=False)
剩余8页未读,继续阅读
- 粉丝: 75
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助