当前位置:   article > 正文

python爬虫实践报告_Python---python网络爬虫入门实践总结

python爬虫实验报告csdn

目录

一、爬虫介绍

爬虫:网络数据采集的程序。

爬虫爬取的数据有什么用?

(1)资料库

(2)数据分析

(3)人工智能:人物画像;推荐系统:今日头条、亚马逊等;图像识别;自然语言处理

为什么用python写爬虫?

java:代码量很大,重构成本变大。

php:天生对多任务支持不太友好,爬取效率低。

c/c++:对程序员不友好,学习成本高,但是非常灵活,运行效率高。

python:生态健全,语法简洁。

爬虫分类:

通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)

二、利用urllib实现最小的爬虫程序

urllib简介:urllib用于获取url(统一资源定位符)的一个python内置模块。

它以urlopen函数形式提供了非常简单的接口。能够使用各种不同的协议来获取网址。

它还提供了一个稍微复杂的接口用于处理常见的情况,比如基本身份验证,cookies,proxies代理等。这些是由handlers和openers提供

案例1: :使用urlopen爬虫实现最简单的爬虫

# 最简单的爬虫

from urllib.request import urlopen

# 使用urlopen爬虫

# 1.发送http请求

resp = urlopen("http://www.baidu.com")

# 2.从返回的响应中提取数据

print(resp.read()) # 提取所有数据

print(resp.read(100)) # 提取数据中的前100个数据

# 3.将数据存入html文件 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

with open("D:/Learning/Python/spider/baidu1.html", "wb") as f: # 绝对路径

f.write(resp.read())

with open("./baidu2.html", "wb") as f: # 相对路径./ 表示当前文件所在的目录(可以省略)

f.write(resp.read())

案例2:使用urlretrieve爬虫

from urllib.request import urlretrieve

# 使用urlretrieve爬虫

urlretrieve("http://www.baidu.com",

filename="D:/Learning/Python/spider/baidu3.html")

三、Requests爬虫实现

Requests简介:Requests是python的http第三方库,在Apache2许可证下发布,该项目是的http请求更加简单和人性化。

Requests特点:Requests底层实现就是urllib,在python2和python3中通用,简单易用

案例1:Requests爬取格言网

import requests

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"}

# resp = requests.get("https://www.baidu.com", headers=headers)

# print(resp.content.decode("utf-8"))

resp = requests.get("http://www.geyanw.com/", headers=headers)

print(resp.content.decode("gb2312"))

# 请求的参数

print(resp.request.headers)

# 写入文件

with open("D:/Learning/Python/spider/geyan.html", "wb") as f:

f.write(resp.content)

四、数据解析利器:lxml xpath

lmx语法:

/:从根节点选取

//:从匹配选择的当前节点开始,不考虑位置

.:当前节点

..:当前节点的父节点

div[@lang]:选取存在lang属性的元素

div[@lang=’eng’]:选取元素属性为eng的元素

text():获取文本信息

lxml使用方式:打开浏览器,访问要爬取的网站内容,点击【F12】,打开开发者工具,按【Ctrl+F】调查开发者工具中的查找输入框工具,利用选择元素工具选择要爬取的内容。从外层往内层取元素。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21haWR1X3hiZA==,size_16,color_FFFFFF,t_70

案例1:利用requests爬取格言网数据,利用lxml解析数据,获取格言标题和具体格言内容,并存入txt文档,如下图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21haWR1X3hiZA==,size_16,color_FFFFFF,t_70

【demo_lxml.py】

# 爬虫网址 "http://www.geyanw.com/" 爬取格言存入txt文件

# 提取名人名言标题 //div[@class='listbox']/dl[@class='tbox']/dd/ul/li/a/text()

# 提取名人名言标题链接列表://div[@class='listbox']/dl[@class='tbox']/dd/ul/li/a/@href

import requests

from lxml.etree import HTML

def get_content_by_xpath(url, xpath):

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"}

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

html_tree = HTML(resp.content)

content_list = html_tree.xpath(xpath)

return content_list

title_list = get_content_by_xpath(

"http://www.geyanw.com/", "//div[@class='listbox']/dl[@class='tbox']/dd/ul/li/a/text()")

link_list = get_content_by_xpath(

"http://www.geyanw.com/", "//div[@class='listbox']/dl[@class='tbox']/dd/ul/li/a/@href")

print("标题:", title_list)

print("链接:", link_list)

# //div[@class='conten']//span/text()

for index, link in enumerate(link_list):

url = "http://www.geyanw.com/"+link

content_list = get_content_by_xpath(

url, "//div[@class='content']//span/text()")

# print(content_list)

with open("D:/Learning/Python/spider/geyan.txt", "a+", encoding="utf-8") as f:

f.write(title_list[index])

f.write("\n")

for line in content_list:

f.write(line)

f.write("\n")

f.write("\n\n")

案例2:调用【get_content_by_xpath】

import requests

from demo_lxml import get_content_by_xpath

list = get_content_by_xpath(

"http://fund.eastmoney.com/519674.html?spm=001.1.swh/", "//div[@class='fundDetail-tit']/div/text()")

print(list)

五、selenium+chromeDriver

对于比较难爬虫的网站措施:利用selenium中的webdriver

(2)找到谷歌浏览器对应版本的chromeDriver.Mirror

查看本机的chrome浏览器版本操作如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21haWR1X3hiZA==,size_16,color_FFFFFF,t_70

下载chromedriver 84.0.4147.30 ,下载后解压文件为【chromedriver.exe】,拷贝至项目目录下。

20200930144834910.png

(3)在.py文件写入并运行

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21haWR1X3hiZA==,size_16,color_FFFFFF,t_70

【demo_selenium.py】

from selenium import webdriver

import time

option = webdriver.ChromeOptions()

# http://quote.eastmoney.com/center/gridlist.html#hs_a_board

driver = webdriver.Chrome(

"D:/Learning/Python/spider/chromedriver", chrome_options=option)

driver.get("http://quote.eastmoney.com/center/gridlist.html#hs_a_board")

# 股票代码://tbody/tr/td[2]/a/text()

# 股票涨跌://tbody/tr/td[6]/span/text()

time.sleep(5)

code_ele_list = driver.find_elements_by_xpath("//tbody/tr/td[2]/a")

incr_ele_list = driver.find_elements_by_xpath("//tbody/tr/td[6]/span")

code_list = []

incr_list = []

for index, code in enumerate(code_ele_list):

code_list.append(code.text)

incr = incr_ele_list[index].text

incr_list.append(incr)

print(code_list)

print(incr_list)

原文链接:https://blog.csdn.net/maidu_xbd/article/details/108881245

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/928063
推荐阅读
相关标签
  

闽ICP备14008679号