工具篇:01用python爬虫
爬虫
爬虫的概念
爬虫我认为就是用代码获取数据
经过我的上网查找得出结论:爬虫是一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。
尝试用python爬虫
用两种爬虫方式第一种是request,第二种scrapy
request的中文是请求的英文
我用request变了一段程序,但在之前刚安装python的小伙伴需要先下在request库,步骤如下:
1.windows+r打开运行框,输入cmd,回车
或者使用搜索并且输入命令提示符
回车运行
2.开始下载:输入 pip install request它就会自动下载,如果下载后最后一行不是红色,而且中间有个叫successfully的单词就说明你下载成功了
3.排错:如果你最后的字是红色的,那就说明你下载失败了,有可能是你的pip install语句太老了,需要更新(有的人认为是重装pip语句),可以在命令行中输入pip install -U pip进行升级
经过亿分钟的操作,我们要用request开始编写代码了
import requests
response = requests.post(url)
response.encoding = response.apparent_encoding
print(response.text)
response是响应的意思注意url是网址且当前用的是post,是一种获取方式,而有两种,一种是post,另一种是get,我从网上获取了具体的post()和get()的区别:
(1)get是从服务器上获取数据,post是向服务器传送数据。
(2)对于表单的提交方式,在服务器端只能用Request.QueryString来获取Get方式提交来的数据,用Post方式提交的数据只能用Request.Form来获取。
(3)一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post好。
来自:https://www.cnblogs.com/mango-lee/p/7116425.html
还有一个问题就是response和response.text的区别,注意response在这里是一个变量,response是一个状态码如果显示的是[200]就说明你爬取成功,而3开头的状态码大部分说明本网站不善于用爬虫的方法预览,如果是4开头就说明爬取失败或网页丢失。response.text()的找到的是网页的代码,大部分都是html,而我用print打印出来的则是网页的代码会有许多标签,例如:
base 指定用于一个文档中包含的所有相对 URL 的根 URL。一份中只能有一个该元素。
head 包含文档相关的配置信息(元数据),包括文档的标题、脚本和样式表等。
link 指定当前文档与外部资源的关系。该元素最常用于链接 CSS,此外也可以被用来创建站点图标(比如“favicon”样式图标和移动设备上用以显示在主屏幕的图标)。
meta 表示那些不能由其它 HTML 元相关(meta-related)元素表示的元数据信息。如:base、link、script、style 或 title。
style 包含文档或者文档部分内容的样式信息,它们会被应用于包含此元素的文档。
title 定义文档的标题,显示在浏览器的标题栏或标签页上。它只应该包含文本,若是包含有标签,则它包含的任何标签都将被忽略。
来自:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element
但我发现这段代码比较复杂需要手动修改,所以我对这段代码做了改进得出
def get_info(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
}
response = requests.post(url,headers)
response.encoding = response.apparent_encoding
print(response.text)
except Exception as exc:
print(exc)
我先是封装函数再这里用headers伪造了一个Google浏览器,这样能爬取更多网站。
try:和except Exception as exc:是为了在代码运行起来前,先检查一遍,如果正确无误就运行try里面的代码,负责就运行except Exception as exc中的代码,except Exception as exc中的代码意思是:发现错误时,将错误内容放进变量esc再将esc中的内容打印出来。
因为我有一亿点点追求完美,所以我将程序再次修改:
import requests
import easygui as e
from bs4 import BeautifulSoup
crawler_data = ''
search = ''
visit_state = False
def get_info(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
}
response = requests.post(url,headers)
response.encoding = response.apparent_encoding
e.msgbox(response.text)
except Exception as exc:
print(exc)
while True:
main_loop_judgment = e.buttonbox('请选择!','',['爬虫','爬取图片','读取爬虫数据','退出'])
if main_loop_judgment == '爬虫':
visit_state = True
uhr_input = e.enterbox('请输入网址')
if uhr_input == None:
e.msgbox('请再输一次')
continue
get_info(uhr_input)
continue
if main_loop_judgment == '爬取图片':
pcsj_pic_response = e.enterbox('请输入图片路径(网页路径 + 图片路径)')
response = get_info(pcsj_pic_response)
with open('素材.png','wb') as file:
file.write(response.content)
e.msgbox('爬取成功\n已放入同文件(图片名为素材.png)')
while visit_state:
if main_loop_judgment == '读取爬虫数据':
d = e.buttonbox('是否要查找特定标签','',['是','否'])
if d == '是':
div = e.enterbox('请输入特定标签')
div_b = e.enterbox('请输入特定大标签')
if div == "" or h == "":
e.msgbox('请重新输入')
continue
pcsj_response = search.find_all(div, class_= div_b)
pcsj_button = pcsj_response.text
if pcsj_button == "":
e.msgbox("你并没有存储爬虫数据")
continue
e.msgbox(pcsj_button)
continue
e.msgbox(pcsj)
if main_loop_judgment == '退出':
break
我用的时easygui库,目的是像HTML做出按钮框。
最后说明一下我对scrapy的研究还在深入,但我还不能做出爬虫程序,所以敬请期待。
下篇预告:工具篇:02用html获取数据