精华内容
下载资源
问答
  • 今日头条爬取

    2019-08-23 11:17:13
    第一部分爬取user-agent到本地并且随机读取一个 import requests import json #从网站读取并且保存 def write_browser_info_to_file(): my_user_agent =requests.get(...

    第一部分爬取user-agent到本地并且随机读取一个

    import requests
    import json
    #从网站读取并且保存
    def write_browser_info_to_file():
        my_user_agent =requests.get("https://fake-useragent.herokuapp.com/browsers/0.1.11")
        with open("browser_info.json","w") as f:
            json.dump(my_user_agent.text,f)
    #write_browser_info_to_file()      #第一次运行代码时需要它,以后把它注释掉
    #从本地读取
    import random
    def get_random_browser():
        with open("browser_info.json","r") as f:
            browsers_json = json.load(f)
            #print(type(browsers_json))
            browsers_json=json.loads(browsers_json)
            #print(type(browsers_json))
            browsers=browsers_json["browsers"]
            #print(browsers)
            i= random.randint(0,len(browsers))
            if i==0:
                browsers_name="chrome"
            elif i==1:
                browsers_name = "opera"
            elif i==2:
                browsers_name = "firefox"
            elif i==3:
                browsers_name = "internetexplorer"
            else:
                browsers_name = "safari"
            final_browser = browsers[browsers_name][random.randint(0,len(browsers_name)-1)]
            #print(final_browser)
            return final_browser
    get_random_browser()
    

    第二部分爬取今日头条当日新闻

    import requests
    import  time
    import json
    from utils import get_random_browser
    #准备以及获取一些必要参数
    def get_request_url_and_headers():
        user_agent = get_random_browser()
        #print(user_agent)
        current_time=int(time.time())
        #print(current_time)
        headers={
            "user-agent":user_agent
        }
        base_usrl="https://www.toutiao.com/api/pc/feed/?"\
                "max_behot_time="+str(current_time)+"&"\
                "category=__all__&utm_source=toutiao&widen=1&" \
                  "tadrequire=true&as=A1954D857F84D3F&" \
                  "cp=5D5FB45D63AF4E1\
                  &_signature=RWvYahAcGDZMJ6J.h5y2iEVr2H"
        proixes={"url":"http://114.235.23.172:9000"}
        return base_usrl,headers,proixes
    #爬取
    def get_respense_html():
        request_url,headers,proxies=get_request_url_and_headers()
        response=requests.get(request_url,headers=headers,proxies=proxies)
    
        global response_json     #为了解决递归留下的祸患
        print(response_json)
        response_json=json.loads(response.text)
        if response_json["message"]=="error":
            get_respense_html()
        return response_json
    
    #保存数据到当地
    def data_to_file():
        data=response_json["data"]
    
        for i in range(len(data)):
            data_dict=data[i]
    
            with open("toutiao.json","a+") as f:
                json.dump(data_dict,f,ensure_ascii=False)
                f.write("\n")
    json_content=get_respense_html()
    print(json_content)
    data_to_file()
    
    import pandas as pd
    #再搞一份excel格式的
    df = pd.read_json("toutiao.json",lines=True)
    print(df)
    df.to_excel("toutiao.xlsx")
    
    展开全文
  • 本项目主要实现了首先通过python编写的爬虫程序,对今日头条的新闻进行爬取爬取的内容相对丰富,内容,图片都有爬取,另外,将获取到的新闻进行了实体分析,用textrank图算法计算了关联程度,得到了每篇新闻的一个...
  • [l]['source'] # 来源 tmp.append(title) tmp.append(source) print(tmp) num += 1 else: continue except Exception as e: pass offset += 20 print("爬取了{}条新闻".format(num)) def get_vedio(): offset = 0 ...
    import requests
    import time
    import random
    import pymongo
    
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
    base_url = 'https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset={}&format=json&keyword={}&'
    video_url = '&from=video&pd=video'
    users_url = '&from=media&pd=user'
    
    # 请设置要爬取的关键字
    keyword = "新闻"
    
    def get_user():
        offset = 0
        tmp=[]
        while (True):
            url = base_url.format(offset, keyword) + users_url
            time.sleep(random.randint(10, 50) * 0.1)
            resopnse = requests.get(url).json()
            if (resopnse['data']) == None:
                break
            length = len(resopnse['data'])
            try:
                for l in range(0, length - 1):
                    dict_ = {}
                    dict_['name']=resopnse['data'][l]['name']
                    dict_['description'] = resopnse['data'][l]['description']
                    tmp.append(dict_)
                offset += 20
                if (len(tmp) > 200):
                    set_comments(tmp)
                    tmp=[]
            except Exception as e:
                print(e)
        if (len(tmp) > 0):
            set_comments(tmp)
    
    
    def get_new():
        offset = 0
        num = 0
        while (True):
            url = base_url.format(offset, keyword)
            time.sleep(random.randint(10, 50) * 0.1)
            resopnse = requests.get(url, headers=headers).json()
            if (resopnse['data']) == None:
                print('data 为空,到达底部')
                break
            length = len(resopnse['data'])
            for l in range(0, length - 1):
                tmp = []
                try:
                    # json中有假数据 用这种方法去除
                    if (resopnse['data'][l]['title'] and resopnse['data'][l]['source']):
                        title = resopnse['data'][l]['title']
                        source = resopnse['data'][l]['source']  # 来源
                        tmp.append(title)
                        tmp.append(source)
                        print(tmp)
                        num += 1
                    else:
                        continue
                except Exception as e:
                    pass
            offset += 20
        print("爬取了{}条新闻".format(num))
    
    
    def get_vedio():
        offset = 0
        num = 0
        while (True):
            url = base_url.format(offset, keyword + video_url)
            time.sleep(random.randint(10, 50) * 0.1)
            resopnse = requests.get(url, headers=headers).json()
    
            if (resopnse['data']) == None:
                print('data 为空,到达底部')
                break
            length = len(resopnse['data'])
            for l in range(0, length):
                tmp = []
                try:
                    # json中有假数据 用这种方法去除   还有一些假数据一模一样...
                    if (resopnse['data'][l]['title'] and resopnse['data'][l]['source']):
                        video_title = resopnse['data'][l]['title']
                        video_source = resopnse['data'][l]['source']  # 来源
                        tmp.append(video_title)
                        tmp.append(video_source)
                        print(tmp)
                        num += 1
                    else:
                        continue
                except Exception as e:
                    pass
            offset += 20
        print("爬取了{}条视频".format(num))
    
    def set_comments(tmp):
            connection = pymongo.MongoClient('81.69.')
            db = connection.weibo
            try:
                db.comments.insert_many(
                    tmp
                )
            except  Exception as e1:
                print(e1)
    if __name__ == '__main__':
        get_vedio()
    
    
    展开全文
  • 搜索头条。 可以得到这个网址: https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D 开发者工具查看: 我们在搜索中并没有发现上面的文字,那么我们可以初步判定,这个由Ajax加载,然后渲染出来的。...

    网址:

    https://www.toutiao.com/

    搜索头条。

    可以得到这个网址:

    https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D

    开发者工具查看:

    我们在搜索中并没有发现上面的文字,那么我们可以初步判定,这个由Ajax加载,然后渲染出来的。此时切换到xhr过滤,可以看到确实是ajax请求。

    观察请求的特点,发现只有offset是改变的,而且一次加20,。

    我们可以用它来控制数据分页,然后把图片下载下来。代码如下:

    import requests
    import os
    from urllib.parse import urlencode
    from hashlib import md5
    from multiprocessing.pool import Pool
    from requests import codes
    
    def get_page(offset):
        params = {
            "offset":offset,
            "format":"json",
            "keyword":"街拍",
            "autoload":"true",
            "count":"20",
            "cur_tab":"1",
            "from":"search_tab"
        }
    
        url = 'https://www.toutiao.com/search_content/?'+urlencode(params)
        try:
            response = requests.get(url)
            if response.status_code == 200:
                # print(url)
                return response.json()
        except requests.ConnectionError:
            return None
    
    # get_page(0)
    
    def get_images(json):
        if json.get('data'):
            for item in json.get('data'):
                if item.get('cell_type') is not None:
                    continue
                title = item.get('title')
                images = item.get('image_list')
                for image in images:
    
                    yield {
                        'title':title,
                        'image':'https:' + image.get('url'),
                    }
    
    
    def save_image(item):
        #os.path.sep    路径分隔符‘//’
        img_path = 'img' + os.path.sep + item.get('title')
        if not os.path.exists(img_path):
            os.makedirs(img_path)
    
        try:
            resp = requests.get(item.get('image'))
            # print(type(resp))
            if codes.ok == resp.status_code:
                file_path = img_path + os.path.sep + '{file_name}.{file_suffix}'.format(
                    file_name=md5(resp.content).hexdigest(),#md5是一种加密算法获取图片的二进制数据,以二进制形式写入文件
                    file_suffix='jpg')
                if not os.path.exists(file_path):
                    with open(file_path,'wb')as f:
                        f.write(resp.content)
                        print('Downladed image path is %s' % file_path)
                else:
                    print('Already Downloaded',file_path)
        except requests.ConnectionError:
            print('Failed to Save Image,item %s' % item)
    
    
    def main(offset):
        json = get_page(offset)
        for item in get_images(json):
            print(item)
            save_image(item)
    
    GROUP = 0
    GROUP_END = 2
    
    if __name__ == '__main__':
        pool = Pool()
        groups = ([x*20 for x in range(GROUP,GROUP_END)])
        pool.map(main,groups)   #将groups一个个调出来传给main函数
        pool.close()
        pool.join()     #保证子进程结束后再向下执行 pool.join(1) 等待一秒
    
    
    
    

     

    展开全文
  • 网上类似的文章其实不少,但是大多是很久之前的,在这期间头条已经做了改版,因此还必须自己动手。具体原理不多说了,直接简单介绍下步骤:1.首先,打开头条首页,搜索关键词「美景」,可以得到搜索结果页面链接为...

    都说人生苦短,我用python。为了找点乐趣,不如写个爬虫?

    那爬什么呢?

    宇宙条是爬虫界行家,它的很多信息都是从其它网站爬来的,那就拿它练练手吧。

    网上类似的文章其实不少,但是大多是很久之前的,在这期间头条已经做了改版,因此还必须自己动手。

    具体原理不多说了,直接简单介绍下步骤:

    1.首先,打开头条首页,搜索关键词「美景」,可以得到搜索结果页面链接为https://www.toutiao.com/search/?keyword=美景​,搜索结果如下:

    image

    2.同时注意到这是一个Ajax请求,因此我们需要拿到其真实的请求url,就是图中红框标出来的部分。

    3.第一次发起搜索请求时,头条有一个滑块验证,这里我们就不模拟这个过程了,手动验证,拿到cookie就好,同时将自己的浏览器信息,请求参数都复制出来:

    image

    连续向后翻页,发现变化的参数只有offset一个,也就是偏移量。

    4.观察请求结果,最关键的是article_url这个字段,根据这个链接重定向,就可以跳转到列表中每篇文章的详情页。

    image

    5.进入详情页,查看网页源码,可以发现图片链接都是以下图标出来的形式记录的,这就好办了,简单正则匹配一下就好

    image

    6.拿到图片链接,保存到本地,大功告成。

    image

    应该说头条相对来说做得比较简单一些,毕竟是新闻类网站,总共差不多100行代码就搞定了,不像淘宝,要爬它的数据就要困难很多。

    当然了,除了爬美景,其它照片你想爬啥就怕啥,修改下搜索关键字就好了。第一次写爬虫,还有很多可以优化的地方。简单贴下代码,需要的自取,鬼晓得头条啥时候又改版了,同时欢迎大家review😆。

    最后,祝各位大小宝宝节日快乐~~~~

    更多技术文章,咱们公众号见,我在公众号里等你~

    image.png

    # -*- coding: utf-8 -*-

    import os

    import re

    import threading

    import time

    from hashlib import md5

    from urllib import urlencode

    import requests

    # 这里设置你想查询的关键字

    keyword = '美景'

    # 这里替换成你自己的浏览器信息

    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'

    # 头条图片搜索需要滑动验证,因此简单处理,先手动验证,然后设置cookie

    cookie = 'tt_webid=6696746174420534791; WEATHER_CITY=%E5%8C%97%E4%BA%AC; UM_distinctid=16b0805ea6f31d-02830a8210d05a-37627e03-1fa400-16b0805ea705fd; tt_webid=6696746174420534791; __tasessionId=znvodagrm1559207733945; csrftoken=7201998104473d4e2ad8302bb74ae401; s_v_web_id=600eabfd649cb7a70f3d80b981411bfc; CNZZDATA1259612802=1444442826-1559202415-%7C1559207815'

    headers = {

    'Host': 'www.toutiao.com',

    'Referer': 'https://www.toutiao.com/search/?keyword=' + keyword,

    'User-Agent': user_agent,

    'X-Requested-With': 'XMLHttpRequest',

    'Cookie': cookie

    }

    start_offset = 0

    end_offset = 20

    step = 20

    # 根据偏移量获取每页文章列表

    def get_page_by_offset(offset):

    params = {

    'aid': '24',

    'app_name': 'web_search',

    'offset': offset,

    'format': 'json',

    'keyword': keyword,

    'autoload': 'true',

    'count': '20',

    'en_qc': '1',

    'cur_tab': '1',

    'from': 'search_tab',

    'pd': 'synthesis',

    }

    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(params)

    try:

    resp = requests.get(url, headers=headers)

    if resp.status_code == 200:

    return resp.json()

    except requests.ConnectionError:

    return None

    # 获取每篇文章的重定向链接

    def get_article_url(article):

    if article.get('data'):

    for item in article.get('data'):

    article_url = item.get('article_url')

    title = item.get('title')

    yield {

    'article_url': article_url,

    'title': title

    }

    # 将图片保存到文件

    def save2file(title, url):

    if not os.path.exists(title):

    os.mkdir(title)

    resp = requests.get(url)

    file_name = './' + title + '/' + md5(resp.content).hexdigest() + '.jpg'

    if not os.path.exists(file_name):

    with open(file_name, 'wb') as f:

    f.write(resp.content)

    else:

    print('Already Downloaded', file_name)

    # 获取每篇文章的图片列表

    def get_image_by_article(article):

    article_url = article.get('article_url')

    title = article.get('title')

    print title

    print article_url

    if article_url:

    try:

    # 这里需要使用session的方式,否则会因为重定向次数太多而报错

    session = requests.Session()

    session.headers['User-Agent'] = headers['User-Agent']

    resp = session.get(article_url)

    if resp.status_code == 200:

    # soup = BeautifulSoup(resp.text, 'lxml')

    # result = soup.find_all(name='script')[6]

    regex = '.*?img src="(.*?)".*?'

    items = re.findall(regex, resp.text, re.S)

    if items:

    for item in items:

    print item

    save2file(title, item)

    except requests.ConnectionError:

    print 'Get image fail.'

    if __name__ == '__main__':

    for offset in range(start_offset, end_offset, step):

    article_list = get_page_by_offset(offset)

    for article in get_article_url(article_list):

    # 每篇文章单独起一个线程进行抓取

    t = threading.Thread(target=get_image_by_article(article))

    t.start()

    t.join()

    # get_image_by_article(article)

    end_time = time.time()

    print('=====Done=====')

    展开全文
  • import requests,re,json,os from urllib import request # 当前路径下新建文件夹 if not os.path.exists('download2'): os.mkdir('download2') #ajax获取路由 i = 0 z = 0 while i < 3: ...
  • 网上也有爬取今日头条图片的案例,但是很多都过时了,为了练习代码,本人亲自写了一个,网上其它案例没有那么复杂,我写的有点复杂化了,不过也比较详细。获取索引页的链接常规方法,对此页面发送请求,如对搜索发.....
  • import requestsimport reimport jsonimport osfrom urllib import requestheaders = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.1...
  • 今日头条新闻爬取爬取下来的新闻正文部分进行实体分析,并将结果可视化 用storm框架将爬取的新闻数据存入mysql 本文主要介绍今日头条新闻爬取的部分,下面给出整个项目的框架 代码介绍 ...
  • Ajax爬取今日头条

    2018-08-13 10:52:30
    今日头条爬取街拍图 (动态页面抓取逆向解析实例) 链接:https://www.toutiao.com/   目标:爬取今日头条街拍图高清图集   目标网站分析: (索引页分析) 1.进入页面,滑下鼠标,发现新的页面不断加载 ...
  • 今日头条图片爬取

    2018-05-27 21:20:53
    """今日头条爬取,关键字:街拍美女""" import os import re import requests from hashlib import md5 from urllib.parse import urlencode from multiprocessing.pool import Pool def get_page(offset): ""...
  • 今日头条街拍爬取

    2017-10-08 14:46:26
    本次练习使用到的知识点有 * Requests 库的使用 * BeautifulShop 库的使用 * 正则表达式的使用 * pymongo 库的使用 1、项目流程分析 2、中心调度 # 中心调度 ... = get_page_index(offset,KEYWORDS)
  • 搜索头条可以得到这个网址:开发者工具查看:我们在搜索中并没有发现上面的文字,那么我们可以初步判定,这个由Ajax加载,然后渲染出来的。此时切换到xhr过滤,可以看到确实是ajax请求。观察请求的特点,发现只有...
  • 我们来记录一个今天遇到的小问题:当我们想要通过爬虫程序获取百度图片、今日头条中的今日街拍中的图片的时候,我们发现请求的url地址有点麻烦,请看具体分析: 百度图片 我们在百度图片搜索框中输入关键词...
  • 万年老掉牙的头条街拍爬取,不过用来练习还是可以的,也有很多资料查询 1.获取总页面的代码 在头条的右上角搜索选项内搜索街拍,我们看见街拍首页了,然后看看是不是js加载的发现还真是,头条全部都是js加载的,...
  • 小白自己在学习崔庆才的《Python3网络爬虫开发实战》的过程中,在第七章有讲到Ajax爬取头条街拍的实战,但是在自己实际编写过程中发现书上给出的代码并不能正常爬取想要的图片,这是因为作者在编写这本书的时间到...
  • 这次以爬取今日头条的图片为例来进行Ajax数据爬取的实战演示。本文也是学习自崔庆才博主的书籍。 二、逻辑分析 首先打开今日头条的网站: https://www.toutiao.com/ ,在搜索框内可以输入任意的内容,比如我...
  • import re import requests import json import os from urllib import request def list_pare(url): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0;... x64) AppleWebKit/537.36 (K...
  • 今日头条新闻爬取爬取下来的新闻正文部分进行实体分析,并将结果可视化 用storm框架将爬取的新闻数据存入mysql 本文主要介绍今日头条新闻爬取的部分,下面给出整个项目的框架 代码介绍 整个实体分析模块分成了四...
  • 爬取今日头条

    2019-04-09 10:13:11
    python爬取今日头条 学习爬虫有一段时间了,今天做个实战小项目,爬取今日头条的热点。很多人都喜欢刷头条, 本次将会爬取热点页面,每隔30秒抓取一次,并以追加的方式保存入文件中 难度:简单 工具: python:...
  • 今日头条新闻爬取爬取下来的新闻正文部分进行实体分析,并将结果可视化 用storm框架将爬取的新闻数据存入mysql 本文主要介绍今日头条新闻爬取的部分,下面给出整个项目的框架 流处理部分 下面主要介绍一下流处理...
  • import requests import re import json import os from urllib import request headers = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/6...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 856
精华内容 342
关键字:

今日头条爬取