【Python黑科技】lxml库爬虫实战-爬取句子控的名人名言句子(保姆级图文+实现代码)


欢迎关注 『Python黑科技』 系列,持续更新中
欢迎关注 『Python黑科技』 系列,持续更新中

实现效果

爬取的内容
在这里插入图片描述

得到的csv文件
在这里插入图片描述


实现思路

  • 导入所用的相关库
  • 分析并得到爬取关键词的url网址
  • 获取一个随机的user_agent(headers的使用使得)
  • 访问网页并爬取句子-句子的作者-句子的出处,把这三个内容封装进2层的list中
  • 把list存入csv文件中,持久化保存

导入所用的相关库

import requests
from lxml import etree
import csv
import random

分析并得到爬取关键词的url网址

我们搜索关键字程序员
在这里插入图片描述
得到的url是https://www.juzikong.com/s?q=程序员
在这里插入图片描述
多尝试几个其他的关键词,得知修改了q=程序员就会搜索其他的关键词,分析之后找到了这个关键词的爬虫key

因为编码的问题,程序员 三个字转化为了 %E7%A8%8B%E5%BA%8F%E5%91%98

#https://www.juzikong.com/s?q=程序员  
#因为url编码要转变的原因,你从浏览器复制黏贴下来会自动变成下面的结果-> 
url = "https://www.juzikong.com/s?q=%E7%A8%8B%E5%BA%8F%E5%91%98"

获取一个随机的user_agent(引入随机headers反爬)

具体可以查看另一篇博文:

【常用的user_agent 浏览器头爬虫模拟用户(保姆级图文+实现代码)】

# 得到随机的一个请求头
def get_random_user_agent():
    user_agent = [
        "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
        "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
        "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
        "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
        "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
        "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
        "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
        "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
        "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
        "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
        "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
        "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
        "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
        "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
        "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
        "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
        "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
        "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
        "UCWEB7.0.2.37/28/999",
        "NOKIA5700/ UCWEB7.0.2.37/28/999",
        "Openwave/ UCWEB7.0.2.37/28/999",
        "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
        # iPhone 6:
        "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",

    ]
    return random.choice(user_agent)

# headers 使用
headers = {'User-Agent': get_random_user_agent()}

访问网页并爬取句子-句子的作者-句子的出处,把这三个内容封装进2层的list中

谷歌浏览器下右键检查获取要爬取的内容的xpth
在这里插入图片描述
复制完整xpth
在这里插入图片描述

整体区域xpth/html/body/div/div/div/div[3]/main/div[2]

#先获取要爬取的名言的整体的每一个个体,然后迭代每个句子的message,author,source
queto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')

在这里插入图片描述

句子内容xpth
/html/body/div[1]/div/div/div[3]/main/div[2]/section[1]/div[2]/a/span[1]/span/span

在这里插入图片描述

作者内容xpth
/html/body/div[1]/div/div/div[3]/main/div[2]/section[16]/div[2]/div/span/a/span/span

在这里插入图片描述

出处内容xpth
/html/body/div[1]/div/div/div[3]/main/div[2]/section[16]/div[2]/div/a/span/span

在这里插入图片描述
这个时候我们会得到

# 先获取要爬取的名言的整体,然后再获取整体下面的每一条名言的message,author,source
queto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')

lists = []

print("得到的句子内容:")
for queto in queto_list:
    # 名言正文  /section[1]/div[2]/a/span[1]/span/span
    message = queto.xpath('./div[2]/a/span[1]/span/span/text()')
    # 作者     /section[16]/div[2]/div/span/a/span/span  不一定每个句子都有作者
    authuor = queto.xpath('./div[2]/div/span/a/span/span/text()')
    # 出处     /section[16] / div[2] / div / a / span / span  不一定每个句子都有出处
    source =  queto.xpath('./div[2] / div / a / span / span/text()')
    # 将数据统一添加进列表中保存
    lists.append(message)
    lists.append(authuor)
    lists.append(source)

但是你会发现,因为搜索关键字的原因,这个网站把我们程序员的关键词的内容给分割了,所以我们还要把message的list变成字符串,比如说:

['我以后是', '程序员', '的话....']应该被转化为['我以后是程序员的话....']

在这里插入图片描述

修改后

# 先获取要爬取的名言的整体,然后再获取整体下面的每一条名言的message,author,source
queto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')

lists = []

print("得到的句子内容:")
for queto in queto_list:
    # 名言正文  /section[1]/div[2]/a/span[1]/span/span
    message = queto.xpath('./div[2]/a/span[1]/span/span/text()')
    # 作者     /section[16]/div[2]/div/span/a/span/span  不一定每个句子都有作者
    authuor = queto.xpath('./div[2]/div/span/a/span/span/text()')
    # 出处     /section[16] / div[2] / div / a / span / span  不一定每个句子都有出处
    source = queto.xpath('./div[2] / div / a / span / span/text()')
    # 将数据统一添加进列表中保存
    this_list = []
    str_message = ''.join(message)
    this_list.append(str_message)
    str_authuor = ''.join(authuor)
    this_list.append(str_authuor)
    str_source = ''.join(source)
    this_list.append(str_source)
    # print(this_list)#打印本句子的所有信息
    lists.append(this_list)

#测试输出保存的数据
print(lists)

在这里插入图片描述

把list存入csv文件中,持久化保存

with open("./名人名言.csv", 'w', encoding='utf-8', newline='\n') as f:
    writer = csv.writer(f)
    for i in lists:
        writer.writerow(i)

在这里插入图片描述


实现代码

完整的实现代码,拿来即用

# @Time    : 2022/2/1 17:45
# @Author  : 南黎
# @FileName: Python爬虫爬取句子迷句子.py

import requests
from lxml import etree
import csv
import random

# https://www.juzikong.com/s?q=程序员
# 因为url编码要转变的原因,你复制下来应该是下面的结果 程序员 三个字转化为了 %E7%A8%8B%E5%BA%8F%E5%91%98
url = "https://www.juzikong.com/s?q=%E7%A8%8B%E5%BA%8F%E5%91%98"


# 得到随机的一个请求头
def get_random_user_agent():
    user_agent = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    ]
    return random.choice(user_agent)


# headers 使用
headers = {'User-Agent': get_random_user_agent()}
print("使用的随机浏览器头:")
print(headers)

get_request = requests.get(url=url, headers=headers).text
# html:爬取得到的网页html内容
html = etree.HTML(get_request)

# 先获取要爬取的名言的整体,然后再获取整体下面的每一条名言的message,author,source
queto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')

lists = []

print("得到的句子内容:")
for queto in queto_list:
    # 名言正文  /section[1]/div[2]/a/span[1]/span/span
    message = queto.xpath('./div[2]/a/span[1]/span/span/text()')
    # 作者     /section[16]/div[2]/div/span/a/span/span  不一定每个句子都有作者
    authuor = queto.xpath('./div[2]/div/span/a/span/span/text()')
    # 出处     /section[16] / div[2] / div / a / span / span  不一定每个句子都有出处
    source = queto.xpath('./div[2] / div / a / span / span/text()')
    # 将数据统一添加进列表中保存
    this_list = []
    str_message = ''.join(message)
    this_list.append(str_message)
    str_authuor = ''.join(authuor)
    this_list.append(str_authuor)
    str_source = ''.join(source)
    this_list.append(str_source)
    # print(this_list)#打印本句子的所有信息
    lists.append(this_list)

# 测试输出保存的数据
print(lists)

with open("./名人名言.csv", 'w', encoding='utf-8', newline='\n') as f:
    writer = csv.writer(f)
    for i in lists:
        writer.writerow(i)

总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python黑科技!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-2-1

欢迎关注 『Python黑科技』 系列,持续更新中
欢迎关注 『Python黑科技』 系列,持续更新中
【Python安装第三方库一行命令永久提高速度】
【使用PyInstaller打包exe】
【免登陆爬虫一键下载知乎文章图片(保姆级图文+实现代码)】
【孤独的程序员和AI机器人朋友聊天解闷(免费接口+保姆级图文+实现代码注释)】
【几行代码绘制gif动图(保姆级图文+实现代码)】
【几行代码实现网课定时循环截屏,保存重要知识点(保姆级图文+实现代码)】
【常用的user_agent 浏览器头爬虫模拟用户(保姆级图文+实现代码)】
【更多内容敬请期待】


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值