IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 1. 爬虫基础 -> 正文阅读

[Python知识库]1. 爬虫基础

python爬虫

1. 爬取网页内容

a. 使用urllib库

# 导入模块
import urllib.request

headers = {
    "User-Agent": "User-Agent:Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11"
}
def use_urllib(url=None, headers=None):
    """
    对于一些有反爬措施的网站,需要利用headers模仿浏览器访问
    :param url:网页地址
    :param headers:用户代理
    :return:返回网页html内容
    """
    req = urllib.request.Request(url=url, headers=headers)
    response = urllib.request.urlopen(req)
    data = response.read().decode()  # 对网页内容进行解码
    print(data)
    return data

b. 使用requests库

import requests

def use_requests(url, headers=None):
    """
    :param url: 网页地址
    :param headers:用户代理,一般可不用
    :return:返回网页html内容
    """
    response = requests.get(url=url, headers=headers)
    print(response)
    data = response.text
    return data
    # print(data)

c. 使用 selenium库调用浏览器

可以用Chrome浏览器和Firefox浏览器,需要下载各自的webdriver, 谷歌浏览器见chromedriver,需要下载对应的版本;火狐浏览器见Firefoxdriver。下载完成后需要解压到编译环境所在的python目录下。

使用如下:

import selenium.webdriver as sw

def use_Chrome():
    # 选择浏览器为Chrome浏览器
    driver = sw.Chrome()
    # 传入需要访问的网址
    driver.get(url)
    # 将网页的内容赋值给data
    data = driver.page_source

    # 将data的内容保存到本地
    with open(FILE_PATH, 'w', encoding='utf-8') as f:
        f.write(data)
    # 关闭浏览器
    driver.close()

def use_Firefox():
    driver = sw.Firefox()
    driver.get(url)
    data = driver.page_source

    # 将网页内容保存到本地
    with open(FILE_PATH, 'w', encoding='utf-8') as f:
        f.write(data)
    driver.close()

2. 爬取某读书网站的小说分类的前十页书

import requests
import selenium.webdriver as sw
from bs4 import BeautifulSoup
import csv

# 书名
book_name_list = []
# 作者
author_name_list = []
# 简介
abstract_list = []

for i in range(0, 10):
    	# 通过翻页获取网址的规律,写入外层循环
        url = "https://www.dushu.com/book/1078_" + str(i + 1) + ".html"
        response = requests.get(url)
        data = response.text
		# BeautifulSoup方法解析网页内容
        soup = BeautifulSoup(data, "html.parser")
        for i in range(40):
            # 找到每页书名对应选择器的样式
            book_name = soup.select("body > div:nth-child(6) > div > "
                                    "div.span19.padding-left > div.bookslist "
                                    "> ul > li:nth-child(" + str(
                i + 1) + ") > div "
                         "> h3 > a")
            author_name = soup.select("body > div:nth-child(6) > div > "
                                      "div.span19.padding-left > "
                                      "div.bookslist > ul > li:nth-child("
                                      "" + str(
                i + 1) + ") > div > p:nth-child(3)")
            abstract = soup.select("body > div:nth-child(6) > div > "
                                   "div.span19.padding-left > div.bookslist >"
                                   " ul > li:nth-child(" + str(
                i + 1) + ") > div > "
                         "p.disc.eps")
            # 将解析得到的书名、作者、简介存到列表中	
            for book_name in book_name:
                book_name_list.append(
                    book_name.get_text().replace("\n", "").replace(" ", ""))
                # print(book_name.get_text().replace("\n", "").replace(" ", ""))
            for author_name in author_name:
                # print(author_name)
                author_name_list.append(
                    author_name.get_text().replace("\n", "").replace(" ", ""))
            for abstract in abstract:
                abstract_list.append(
                    abstract.get_text().replace("\n", "").replace(" ", ""))

找相应样式,在网页右键检查元素->操作框左上角->选择一个元素检测->选择书名->右键复制selector
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pAl4ECWv-1629129168031)(C:\Users\albert\Pictures\屏幕截图 2021-08-16 234337.png)]

3. 将爬取的内容写入csv文件

def save_csv(path):
    with open(path, 'w', newline='',encoding='utf_8_sig') as f:
        # 定义表头名
        fieldnames = ["书名", "作者", "简介"]
        # 以字典形式写入
        f_csv = csv.DictWriter(f, fieldnames)
        # 写入表头
        f_csv.writeheader()
        for i in range(len(book_name_list)):
        # 循环写入行,key值需要和表头值对应
            f_csv.writerow({
                "书名": book_name_list[i],
                "作者": author_name_list[i],
                "简介": abstract_list[i],
            })

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uC3axnBY-1629128977543)(C:\Users\albert\AppData\Roaming\Typora\typora-user-images\image-20210816234904348.png)]

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:21:33  更:2021-08-17 15:22:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:43:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码