Python简单的"今日头条"爬虫

Hello, 感觉好久没有写简书了,最近一直在忙支付和新需求,忙里偷闲学了一下 python 的简单使用,然后尝试的爬了一下"今日头条",效果还不错,下面简单介绍下我的第一个爬虫.不足之处请多多指教.

1.首先要捕获到目标的链接请求地址以及相应的参数

我是通过 chrome 自带工具,找到相应的 Request Url 和 parameters


获取目标 url 和parameter.png

2.获取到相应的链接地址和参数之后,然后我们接下来要用 python 请求数据

首先导入数据请求库

import urllib.request as ur

通过观察发现,在请求参数中只有 offset 和 keyword 是变化的,所以我们创建一个数据请求方法将参数传入

def get_page_index(offset,keyword):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword': keyword,
        'autoload': 'true',
        'count': '20',
        'cur_tab': '1'
    }

    try:
        url = 'http://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E4%B8%89%E9%87%8C%E5%B1%AF%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=1' + urlaa.urlencode(data)
        reponse = ur.urlopen(url)
        text = reponse.read()
        text = text.decode('utf-8')
        return text
    except BaseException as e:
        print(e)

3.请求数据结束后需要解析返回的相应数据,得到相应数据之后我们需要对数据进行解析,然后得到我们有用的图片链接地址

解析数据方法代码如下:

def parse_page_index(html):
    data = json.loads(html)
    if data and 'data' in data.keys():
        for item in data['data']:
            yield item['article_url']

首先将返回的数据解析为 json 数据,然后再通过看 json 串的结构来找到相应数据.

json 数据结构图.png

首先找到 data 字段,然后遍历其中的数组,获取到每个元素的article_url字段,观察发现article_url此字段为详情链接,然后我们需要进入详情界面分别获取到各文章相应的图片.

4.解析新闻详情界面数据

在解析详情界面时,我们需要用到 BeautifulSoup ,首先导入
from bs4 import BeautifulSoup
之后建立获取详情数据方法

def parse_page_detail(html, url):
    soup = BeautifulSoup(html, 'html.parser')
    title = soup.select('title')[0].get_text()
    #正则表达式对象
    images_pattern = re.compile(r'var gallery = (.*?);', re.S)
    result = re.search(images_pattern, html)
    if result:
        data = json.loads(result.group(1))
        if data and 'sub_images' in data.keys():
            sub_images = data['sub_images']
            images = [item.get('url') for item in sub_images]
            return {
                'title': title,
                'url': url,
                'images': images
            }

通过传入的链接地址,用BeautifulSoup库抓取网页数据,然后通过 select 方法获取到其标题为 title 的字段数据,之后将其转化为 json 串,然后找到相应新闻的标题,新闻链接和图片的链接地址数组.

以上为数据的抓取过程,之后部分为数据的存储

数据的存储我用到了两种方式:
1.MySQL
2.存取到本地

先来看存储到数据库

存取到数据库首先要创建数据库,导入pymysql
import pymysql
之后链接到远程数据库

连接远程数据库.png

链接成功后我们先创建表格然后插入�相应的数据

def create_table_db():
    sql = "create table if not exists tank_python_one(id INT primary key not null auto_increment ,title   VARCHAR(100),url VARCHAR (100),images VARCHAR (1000))"
    cursor.execute(sql)

def save_info_sql(info, num):
    sql = "insert into tank_python_one(title, url, images) VALUES(%s, %s, %s)"
    images_str = ','.join(str(i) for i in info['images'])
    data = (info['title'], info['url'], images_str)
    cursor.execute(sql, data)
    connect.commit()
    # print('成功插入', cursor.rowcount, '条数据')
    save_file(info['title'], info['images'], num)

到这里就可以将爬取下来的数据存储到相应的数据库表中了.

接下来看存储到本地

存储到本地用到了 urllib 库的urlretrieve方法,将图片的路径和创建文件的名称传入即可实现将网络图片下载到本地,十分简便

def save_file(filename, images, num):
    # 保存到本地
    temp = 0
    for url in images:
        pathname = '/Users/MyMac/Desktop/图片/%sx%sy%s.jpg' % (filename, num, temp)
        ur.urlretrieve(url, pathname)
        temp += 1
        # print(pathname + '保存成功')

完整代码请看 github链接 https://github.com/spj393988297/python_toutiao.git
好啦,这样我的第一个 python 爬虫就完成啦,中间安装各种库也出现了一些的问题,但终于一一克服了,程序有许多的不完美之处,希望各位大神指点一二,毕竟刚学没经验.希望我们在求知的路上勇往直前.
Tank 无畏艰难险阻!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容