爬虫流程
- 定义url,伪造headers
 - 请求数据
 - 解析数据
 - 提取数据
 - 持久化保存
 
实例
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大数据感兴趣的朋友欢迎一起讨论、交流,请多指教!










