网页数据抓取怎么写(Python爬虫初探初探为什么选择Python?爬虫是什么?网络爬虫)

优采云 发布时间: 2022-01-13 22:06

  网页数据抓取怎么写(Python爬虫初探初探为什么选择Python?爬虫是什么?网络爬虫)

  初探 Python 爬虫 为什么选择 Python?什么是爬虫?

  网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,通常称为网络追逐者)是根据某些规则自动从万维网上爬取信息的程序或脚本。

  基本知识概念

  URL(协议(服务模式)+IP地址(含端口号)+具体地址),即统一资源定位器,也就是我们所说的网站,统一资源定位器就是可以定位和访问的资源从 Internet 获得 方法的简洁表示是 Internet 上标准资源的地址。Internet 上的每个文件都有一个唯一的 URL,其中收录指示文件位置以及浏览器应该如何处理它的信息。爬虫在爬取数据时,必须有目标URL才能获取数据。因此,它是爬虫获取数据的基本依据。

  URI 在计算机术语中,统一资源标识符 (URI) 是用于标识 Internet 资源名称的字符串。这种标识允许用户通过特定的协议与任何(包括本地和互联网)资源进行交互。URI 由收录特定语法和相关协议的方案定义。

  

  浏览网页的过程

  在用户浏览网页的过程中,我们可能会看到很多漂亮的图片,比如我们会看到几张图片和百度搜索框,这个过程其实就是用户输入网址后,经过DNS服务器,找到服务器主机, 向服务器发送请求。服务器解析后,将HTML、JS、CSS等文件发送到用户的浏览器。浏览器解析后,用户可以看到各种图片。其实就是一个http请求的过程。

  爬虫入门

  

  常用爬虫库

  请求库:requests、selenium(自动化测试工具)+ChromeDrive(chrome驱动)、PhantomJS(无界面浏览器)

  解析库:LXML(html、xml、Xpath方法)、BeautifulSoup(html、xml)、PyQuery(支持css选择器)、Tesserocr(光学字符识别、验证码)

  数据库:mongo、mysql、redis

  存储库:pymysql、pymongo、redispy、RedisDump(用于导入和导出 Redis 数据的工具)

  网络库:Flask(轻量级网络服务器)、Django

  其他工具:Charles(网络抓包工具)

  示例(如果 cookie 不起作用,您可以更改) 基本示例

   myUrl = "https://m.qiushibaike.com/hot/page/" + page

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

headers = {'User-Agent': user_agent}

#请求头相关

print(myUrl)

req = request.Request(myUrl, headers=headers)

#调用库发送请求

myResponse = request.urlopen(req)

myPage = myResponse.read()

# encode的作用是将unicode编码转换成其他编码的字符串

# decode的作用是将其他编码的字符串转换成unicode编码

unicodePage = myPage.decode("utf-8")

print(unicodePage)

  一个比较复杂的例子是爬虫百科网站,拉出作者头像、作者姓名、内容

  修改自:

<p># -*- coding: utf-8 -*-

import urllib

import _thread

import re

import time

from urllib import request

# ----------- 加载处理糗事百科 -----------

class Spider_Model:

def __init__(self):

self.page = 1

self.pages = []

self.enable = False

# 将所有的段子都扣出来,添加到列表中并且返回列表

def GetPage(self, page):

myUrl = "https://m.qiushibaike.com/hot/page/" + page

user_agent = &#39;Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)&#39;

headers = {&#39;User-Agent&#39;: user_agent}

print(myUrl)

req = request.Request(myUrl, headers=headers)

myResponse = request.urlopen(req)

myPage = myResponse.read()

# print(myPage)

# encode的作用是将unicode编码转换成其他编码的字符串

# decode的作用是将其他编码的字符串转换成unicode编码

unicodePage = myPage.decode("utf-8")

print(unicodePage)

# 找出所有class="content"的div标记

# re.S是任意匹配模式,也就是.可以匹配换行符

# myItems = re.findall(&#39;(.*?)&#39;, unicodePage, re.S)

content = re.findall(&#39;.*?(.*?)(.*?)&#39;, unicodePage, re.S)

items = []

# print("~~~~~~~~~~~~~~~~~~~")

# print(content)

# print(len(content))

# print(content[1])

imageIcon = re.findall(&#39;.*?(.*?)&#39;, unicodePage, re.S)

# print("~~~~~~~~~~~~~~~~~~~")

# print(imageIcon)

# print(len(imageIcon))

# print(imageIcon[0][0])

# print(imageIcon[0][1])

# print(imageIcon[1][0])

# print(imageIcon[1][1])

for index in range(min(len(content), len(imageIcon)) - 1):

items.append([content[index][0].replace("\n", "").replace("

", ""), imageIcon[index][0], imageIcon[index][1]])

return items

# 用于加载新的段子

def LoadPage(self):

# 如果用户未输入quit则一直运行

while self.enable:

# 如果pages数组中的内容小于2个

if len(self.pages)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线