wns9778.com_威尼斯wns.9778官网

热门关键词: wns9778.com,威尼斯wns.9778官网
wns9778.com > 计算机教程 > Python 爬取简书个人文章目录、查看数及链接地址

原标题:Python 爬取简书个人文章目录、查看数及链接地址

浏览次数:145 时间:2019-05-10

对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式。因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门。本文想针对某一网页对 python 基础爬虫的两大解析库( BeautifulSoup 和 lxml )和几种信息提取实现方法进行分析,以开 python 爬虫之初见。

Python 爬取简书个人文章目录、查看数及链接地址

基础爬虫的固定模式

笔者这里所谈的基础爬虫,指的是不需要处理像异步加载、验证码、代理等高阶爬虫技术的爬虫方法。一般而言,基础爬虫的两大请求库 urllib 和 requests 中 requests 通常为大多数人所钟爱,当然 urllib 也功能齐全。两大解析库 BeautifulSoup 因其强大的 HTML 文档解析功能而备受青睐,另一款解析库 lxml 在搭配 xpath 表达式的基础上也效率提高。就基础爬虫来说,两大请求库和两大解析库的组合方式可以依个人偏好来选择。

笔者喜欢用的爬虫组合工具是:

  • requests   BeautifulSoup

  • requests   lxml

图片 1

同一网页爬虫的四种实现方式

笔者以腾讯新闻首页的新闻信息抓取为例。

首页外观如下:

图片 2

比如说我们想抓取每个新闻的标题和链接,并将其组合为一个字典的结构打印出来。首先查看 HTML 源码确定新闻标题信息组织形式。

图片 3

可以目标信息存在于 em 标签下 a 标签内的文本和 href 属性中。可直接利用 requests 库构造请求,并用 BeautifulSoup 或者 lxml 进行解析。

  • 方式一: requests   BeautifulSoup   select css选择器

    1 # select method 2 import requests 3 from bs4 import BeautifulSoup 4 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'} 5 6 url = 'http://news.qq.com/' 7 8 Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml') 9 10 em = Soup.select('em[class="f14 l24"] a') 11 for i in em: 12 13 title = i.get_text() 14 15 link = i['href'] 16 17 print({'标题': title, 18 '链接': link 19 20 })

很常规的处理方式,抓取效果如下:

图片 4

  • 方式二: requests   BeautifulSoup   find_all 进行信息提取

    1 # find_all method 2 import requests 3 from bs4 import BeautifulSoup 4 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'} 5 6 url = 'http://news.qq.com/' 7 8 Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml') 9 10 em = Soup.find_all('em', attrs={'class': 'f14 l24'})for i in em: 11 12 title = i.a.get_text() 13 14 link = i.a['href'] 15 16 print({'标题': title, 17 '链接': link 18 19 })

同样是 requests   BeautifulSoup 的爬虫组合,但在信息提取上采用了 find_all 的方式。效果如下:

图片 5

  • 方式三: requests   lxml/etree   xpath 表达式

    1 # lxml/etree method 2 import requests 3 from lxml import etree 4 5 6 7 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'} 8 9 url = 'http://news.qq.com/' 10 11 html = requests.get(url = url, headers = headers) 12 13 con = etree.HTML(html.text) 14 15 16 17 title = con.xpath('//em[@class="f14 l24"]/a/text()') 18 19 link = con.xpath('//em[@class="f14 l24"]/a/@href') 20 for i in zip(title, link): 21 22 print({'标题': i[0], 23 '链接': i[1] 24 25 })

使用 lxml 库下的 etree 模块进行解析,然后使用 xpath 表达式进行信息提取,效率要略高于 BeautifulSoup   select 方法。这里对两个列表的组合采用了 zip 方法。python学习交流群:125240963效果如下:

图片 6

  • 方式四: requests   lxml/html/fromstring   xpath 表达式

    1 # lxml/html/fromstring method 2 import requests 3 import lxml.html as HTML 4 5 6 7 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'} 8 9 url = 'http://news.qq.com/' 10 11 con = HTML.fromstring(requests.get(url = url, headers = headers).text) 12 13 title = con.xpath('//em[@class="f14 l24"]/a/text()') 14 15 link = con.xpath('//em[@class="f14 l24"]/a/@href') 16 for i in zip(title, link): 17 18 print({'标题': i[0],'链接': i[1] 19 20 })

跟方法三类似,只是在解析上使用了 lxml 库下的 html.fromstring 模块。抓取效果如下:

图片 7

很多人觉得爬虫有点难以掌握,因为知识点太多,需要懂前端、需要python熟练、还需要懂数据库,更不用说正则表达式、XPath表达式这些。其实对于一个简单网页的数据抓取,不妨多尝试几种抓取方案,举一反三,也更能对python爬虫有较深的理解。长此以往,对于各类网页结构都有所涉猎,自然经验丰富,水到渠成。

 

1. 通过360极速浏览器的审查元素,选“Network”->“XHR”选项,滚动页面,找出连接地址构成的规律。https://www.jianshu.com/u/55b597320c4e?order_by=shared_at&page=2

如下图:

图片 8

  1. 根据文件数和每页显示的数量,构建链接地址。

urls =[ 'https://www.jianshu.com/u/55b597320c4e?order_by=shared_at&page={}'.format(str(i)) for i in range(1,13)]

图片 9

图片 10

  1. 使用LXML库,查找需要的标题,查看量,超链地址。

代码如下:

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

import  requests,time

from lxml import  etree

import pymongo

from multiprocessing import Pool  #多线程库

client = pymongo.MongoClient('localhost',27017)

mydb = client['mydb']

jianshu_user_dy = mydb['jianshu_user_dy']

headers = {

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

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',

'Referer': 'https://www.jianshu.com/u/9104ebf5e177'

}

def get_infos(url):

try:

本文由wns9778.com发布于计算机教程,转载请注明出处:Python 爬取简书个人文章目录、查看数及链接地址

关键词: wns9778.com

上一篇:wns9778.com关于foo的一个面试题

下一篇:没有了