python多线程爬取网页

#-*- encoding:utf8 -*-
‘‘‘
Created on 2018年12月25日

@author: Administrator
‘‘‘
from multiprocessing.dummy import Pool as pl
import csv
import requests
from lxml import etree

def spider(url):
    header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36                (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
    r = requests.get(url=url, headers=header)
    return r.json()

def spider_detail(url):
    resp = spider(url)
    title = resp.get(‘data‘).get(‘title‘)
    print(title)
    content = resp.get(‘data‘).get(‘content‘)
    try:
        title_clear = title.replace(‘|‘, ‘‘).replace(‘?‘, ‘‘)
        content_clear = content.replace(‘</p><p>‘,‘\n\n‘).replace(‘<p>‘,‘‘)
        sel = etree.HTML(content_clear)
        content_clear = sel.xpath(‘string(//*)‘)
        artical_write(title_clear, content_clear)
        print(title_clear)
    except:
        pass

def get_all_urls(page_number):
    for i in range(1, page_number + 1):
        url = ‘https://36kr.com/api/search-column/mainsite?per_page=20&page=‘ + str(i)
        resp = spider(url)
        artical_data = resp.get(‘data‘).get(‘items‘)
        for url_data in artical_data:
            number = url_data.get(‘id‘)
            artical_url = ‘https://36kr.com/api/post/‘+ str(number) +‘/next‘
            yield artical_url

def artical_write(title, content):
    with open(‘d:/spider_data/11.11/‘ + title + ‘.txt‘, ‘wt‘, encoding=‘utf-8‘) as f:
        f.write(content)

if __name__ == ‘__main__‘:
    # 线程数, 默认为cpu核心数
    pool = pl(4)

    # url列表收集
    all_url = []
    for url in get_all_urls(100):
        all_url.append(url)

    # 多线程爬取
    pool.map(spider_detail, all_url)
    pool.close()
    pool.join()

  

原文地址:https://www.cnblogs.com/perilong16/p/10177148.html

时间: 2024-10-08 13:55:31

python多线程爬取网页的相关文章

python之爬取网页数据总结(一)

今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests    Beautifulsoup4   lxml  三个插件. 因为配置了环境变量,可以cmd命令直接安装.假如电脑上有两个版本的python,建议进入到目录安装. 安装的命令为 pip install requests(Beautifulsoup4   /lxml  ) 三条分别执行. 安装结束,可以尝试网上一些简单的例子,明白了解 Beautifulso

python 闭包 爬取网页

1 >>> import requests 2 3 #闭包:让数据常驻内存,多次需要的时候会加快速度,无需重新获取费时间 4 >>> def fun(): 5 r = requests.get("http://www.biqukan.cc/book/45705/").text 6 def temp(): 7 return r 8 return temp() 9 10 >>> ma = fun() 11 >>> t1

python爬虫——爬取网页数据和解析数据

1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2.网络爬虫的功能   图2 网络爬虫可以代替手工做很多事情,比如可以用于做搜索引擎,也可以爬取网站上面的图片,比如有些朋友将某些网站上的图片全部爬取下来,集中进行浏览,同时,网络爬虫也可以用于金融投资领域,比如可以自动爬取一些金融信息,并进行投资分析等. 有时,我们比较喜欢的新闻网站可能有几个,每次

python动态爬取网页

简介 有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得. 这说明我们想要的元素是在我们的某些操作下通过js事件动态生成的.举个例子,我们在刷QQ空间或者微博评论的时候,一直往下刷,网页越来越长,内容越来越多,就是这个让人又爱又恨的动态加载. 爬取动态页面目前来说有两种方法 分析页面请求 selenium模拟浏览器行为 1.分析页面请求 键盘F12打开开发者工具,选择Network选

python 嵌套爬取网页信息

当需要的信息要经过两个链接才能打开的时候,就需要用到嵌套爬取. 比如要爬取起点中文网排行榜的小说简介,找到榜单网址:https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=1 将榜单上的小说链接爬出来,在从小说链接里面爬小说简介 import pymysql import requests from hashlib import

网络爬虫:使用多线程爬取网页链接

前言: 经过前面两篇文章,你想大家应该已经知道网络爬虫是怎么一回事了.这篇文章会在之前做过的事情上做一些改进,以及说明之前的做法的不足之处. 思路分析: 1.逻辑结构图 上图中展示的就是我们网络爬虫中的整个逻辑思路(调用Python解析URL,这里仅仅作了简略的展示). 2.思路说明: 首先.我们来把之前思路梳理一下.之前我们採用的两个队列Queue来保存已经訪问过和待訪问的链接列表,并採用广度优先搜索进行递归訪问这些待訪问的链接地址.并且这里使用的是单线程操作. 在对数据库的操作中.我们加入了

Python爬虫爬取网页图片

没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来. 今天逛贴吧看见好多美图,可是图片有点多,不想一张一张地复制粘贴,怎么办呢?办法总是有的,即便没有我们也可以创造一个办法. 下面就看看我今天写的程序: #coding=utf-8 #urllib模块提供了读取Web页面数据的接口 import urllib #re模块主要包含了正则表达式 import re #定义一个getHtml()函数 def getHtm

Python之爬取网页时到的问题——urllib2

本文通过摘取  http://blog.csdn.net/howeblue/article/details/47426265  博客上的内容整理而成,有兴趣的可以去看看原文. urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.本文主要是描述urllib2. urllib2是Python的一个获取URL的组件,它常用的方法及类如下: 1,   urllib2.urlopen (  url  [, data]  [, timeout]  )  它打开URL网址,url

python多线程爬取-今日头条的街拍数据(附源码加思路注释)

这里用的是json+re+requests+beautifulsoup+多线程 1 import json 2 import re 3 from multiprocessing.pool import Pool 4 5 import requests 6 from bs4 import BeautifulSoup 7 from config import * 8 from requests import RequestException 9 10 11 def get_page_index(of