0
点赞
收藏
分享

微信扫一扫

requests模块爬取糗事百科用xpath解析

m逆光生长 2022-03-11 阅读 78

爬虫流程

  1. 定义url,伪造headers
  2. 请求数据
  3. 解析数据
  4. 提取数据
  5. 持久化保存

实例

import requests
from lxml import etree
import time
import csv

# 1,定义url,伪造headers
url = "https://fm.qq.com/category/39087_38979"
headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}

# 2,请求数据
response = requests.get(url=url,headers=headers).text
# 3,解析数据
tree = etree.HTML(response)
html_li = tree.xpath('//*[@id="j-album-list"]/li')

with open('糗百.csv', 'w', encoding='gbk', newline='') as f:         # 创建文件对象(指定文件名,模式,编码方式)
    csv_writer = csv.writer(f)                      # 基于文件对象构建 csv写入对象
    csv_writer.writerow(["标题", "图片url", "内容"])  # 构建列表头
    for li in html_li:
        time.sleep(0.5)
        # 4,提取数据
        title = li.xpath('./div[2]/div/div[1]/a/text()')[0]
        image_url = li.xpath('./div[1]/img/@src')[0]
        content = li.xpath('./div[2]/div/div[2]/text()')[0]
        # 5、写入数据
        csv_writer.writerow([title, image_url, content])    # 写入csv文件内容
        print('写入成功:{0}'.format(title))
f.close()   # 关闭文件

文件预览

总结:

我在本次爬取数据中遇到过两个问题。

第一个问题是打印的时候没有乱码,但保存在文件中打开的时候中文乱码了

解决方法是在open函数中增加了这个属性 encoding="gbk",如果不行的话可以试一下其他编码方式,中文编码常用的有 gbk、gb2312、utf-8。多试试总有一个可以,如果是打印的时候乱码了就得在请求后面加行代码  encoding = "gbk"  (网页源码head标签中的charset属性决定编码方式)

第二个问题是保存在csv文件的时候每行之间有空行

解决方法是在open函数中增加这个属性  newline=""        (空串)

打卡第58天,对python大数据感兴趣的朋友欢迎一起讨论、交流,请多指教!

举报

相关推荐

0 条评论