Python数据分析及可视化实例之爬虫源码(02)

发布时间:2021-12-03 公开文章

1.背景介绍

(1)今天有人问怎么采集这个网站;本打算讲Cookies免密登录今日头条,但一看这个网站刚好是Table表单,顺便讲一下CSV的保存也是不错的,当然Cookies还得预习一下。

 

 

 

 

(3)源码重点掌握:Requests请求,Beautifulsoup提取Table标签内容要比Re简单多了,不信你可以正则试一下;CSV保存。分析这个网站源码构造请求链接没有任何难度,就不赘述。

(4)预留作业:今日头条实现Cookie免密登录(难度★★★☆☆);如果登录成功了,下节内容就可以跳过;然后直接Ajax数据采集(难度★★★☆☆),POST留言(难度★★★★☆)。

(5)凡是在该源码基础上改编的爬虫,可以将源码投稿到本专栏;录用即分享若干私藏中、英文Python资料,源码,视频。

 

 

 

 

2.源码

# coding:utf-8
import requests,csv
from bs4 import BeautifulSoup

headers = {
    # 'Host': 'Wx:nemoon',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Connection': 'keep-alive',
    'Accept-Encoding':'gzip, deflate',
    'Upgrade-Insecure-Requests':'1'
}  # 请求头,蛇无头不行,带上吧,后面会讲到用Cookie实现单账号免密登录

# 下期预告:
# 1,在请求前Host,Referer,Cookies以字典的形式直接定义
# 2,直接在请求前设置Cookies
    # s.cookies.set('mycookie','value') #设置cookies
# 3, 在请求过程中更新Cookies
    # c = requests.cookies.RequestsCookieJar()#定义一个cookie对象
    # c.set('cookie-name', 'cookie-value')#增加cookie的值
    # s.cookies.update(c)#更新s的cookie
# 4,删除Cookies
    # s.cookies.clear()#删除cookies,也可以使用s.cookies=None的方式将所有cookies删除

s = requests.session()  # 保留会话


def bs_test(text):
    soup = BeautifulSoup(text, "lxml")
    table_trs = soup.find_all('tr',{'class':'hover'})
    # 预留小作业,提取表头,并写入csv
    for i in table_trs:
        content=[ i_in.text for i_in  in i.find_all('td')]
        print(content)
        with open('file_name.csv', 'a', newline='') as f:  # 删除空格
            f_csv = csv.writer(f)
            f_csv.writerow(content)
            f.close()


if __name__ == '__main__':
    # base_url = 'http://www.jxyycg.cn/yzxt/publicity/view?id=eb1a21f2ab6a40119544e9048417bc1f&pageNo=2'
    for i in range(1) : # 用1页测试一下
        url = 'http://www.jxyycg.cn/yzxt/publicity/view?id=eb1a21f2ab6a40119544e9048417bc1f&pageNo=' +str(i+1)
        req_text = s.get(url).text
        # print(req_text) #  BS
        urls = bs_test(req_text)