python爬取文字和图片_Selenium_Chrome爬取文本和百度图片
1、下载chrome浏览器,查看浏览器版本(在chrome浏览器中输入下面命令)
chrome://version/
3、将下载后的chrome驱动放入到python路径下的Scripts目录下
①找不到对应版本(大版本一致即可)
chrome版本:84.0.4147.125 (正式版本) (64 位)
chromedriver.exe版本:84.0.4147.30
②chromedriver.exe放入对应位置
F:\Anaconda3\Scripts
4、测试是否成功
https://www.jd.com/ :输入框id为key (可以键盘Enter,也可以点击按钮)
from selenium import webdriver # 用来驱动浏览器的
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素
import time
driver=webdriver.Chrome()
try:
#隐式等待:在查找所有元素时,如果尚未被加载,则等10秒
driver.implicitly_wait(10)
#1、访问百度
driver.get('https://www.baidu.com/')
#2、查找输入框
input_tag=driver.find_element_by_id("kw")
#3、在搜索框在输入要搜索的内容
input_tag.send_keys('秦时明月')
# 4、按键盘回车键
input_tag.send_keys(Keys.ENTER)
finally:
#driver.close()
pass
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
try:
driver.implicitly_wait(10)
# 1、往jd发送请求
driver.get('https://www.jd.com/')
# 找到输入框输入围城
input_tag = driver.find_element_by_id('key')
input_tag.send_keys('围城')
# 键盘回车
input_tag.send_keys(Keys.ENTER)
time.sleep(2)
# 找到输入框输入墨菲定律
input_tag = driver.find_element_by_id('key')
input_tag.clear()
input_tag.send_keys('墨菲定律')
# 找到搜索按钮点击搜索
button = driver.find_element_by_class_name('button')
button.click()
time.sleep(10)
finally:
driver.close()
5、如何获取html内容
①隐式等待
②driver.find_element_by_xpath(path)
path:单斜杠,绝对路径
path:双斜杠,相对路径
find_element_by_xpath:第一个
find_elements_by_xpath:全部,list
//div[@id="images"] :限制条件 [@id="images"]
from selenium import webdriver
driver = webdriver.Chrome()
'''
Example website
Name: My image 1
Name: My image 2
Name: My image 3
Name: My image 4
Name: My image 5
'''
try:
# 隐式等待: 写在get请求前
driver.implicitly_wait(10)
driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')
#根据xpath语法查找元素(element elements)
#单斜杠/-->从根节点开始 绝对定位
html = driver.find_element_by_xpath('/html')
a = driver.find_elements_by_xpath("/html/body/div/a")
#html = driver.find_element_by_xpath('/head') # 报错
print(a[2].text)
#双斜杠//--> 相对路径
div = driver.find_element_by_xpath('//a')
print(div.tag_name)
# 艾特符号@ -->查找id为images的div节点
div = driver.find_element_by_xpath('//div[@id="images"]')
print(div.tag_name)
print(div.text)
# 找到任意一个a节点
a = driver.find_element_by_xpath('//a')
print(a.get_attribute('href'))
print(a.text)
a = driver.find_elements_by_xpath('//img')
print(a[2].get_attribute('src'))
finally:
#pass
driver.close()
6、如何爬取一个页面(不同版本,可能对于的div属性名不一致,需要检查class和target等等)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': './download'}
options.add_experimental_option('prefs', prefs)
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 2不加载图片,加快访问速度
options.add_experimental_option('excludeSwitches',
['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
# options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(10)
driver.get(url="https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&word=%E5%A4%B1%E4%B8%9A%E5%B0%B1%E4%B8%9A")
for key in ["自然灾害"]:
yy=driver.find_element_by_id("kw") #找到输入框
yy.clear() #清空输入框
yy.send_keys(key) #输入框填充数据
driver.find_element_by_id("su").click() #点击搜索
from tqdm import tqdm
from lxml import etree
#print(driver.page_source) #整个页面
allcontent=[]
alltitle=[]
for index in tqdm(range(1)):
try:
titles=[]
urls=[]
dom = etree.HTML(driver.page_source)
for j in dom.xpath('//div[@class="result-op c-container xpath-log new-pmd"]'):
url=j.xpath('.//a[@target="_blank"]')[0].xpath('.//@href')
title="".join([i.strip() for i in j.xpath('.//a[@target="_blank"]')[0].xpath('.//text()')])
urls.append(url)
titles.append(title)
assert len(urls)==len(titles)
#根据url获取标题里面的内容
import requests as req
txts=[]
for i in urls:
tmp=req.get(i[0]).content
try:
content = str(tmp,"utf-8")
except:
content = str(tmp,"gbk")
dom = etree.HTML(content)
txt=dom.xpath('//p//text()') #所有的p标签
txts.append(txt)
assert len(titles)==len(txts)
alltitle.extend(titles)
allcontent.extend(txts)
except:
pass
#下一页
tmp=driver.find_elements_by_class_name('n')
time.sleep(3) #延迟3秒
tmp[-1].click() #上一页和下一页的区别,只取下一页
#写入
import pandas as pd
df=pd.DataFrame()
df["text"]=allcontent
df["title"]=alltitle
print(alltitle[0])
print(type(alltitle[0]))
df.to_csv(key+".csv",header=True,index=False,encoding="utf_8_sig") #utf-8
driver.quit()
7、如何爬取百度图片
from selenium import webdriver
import time
import requests
import os
from lxml import etree
name = input('请输入你要搜索的名字:')
number = int(input('请输入你要保存的文件数量:'))
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://image.baidu.com/') #打开百度图片
driver.find_element_by_id('kw').send_keys(name) #文本框输入name
driver.find_element_by_class_name('s_search').click() #点击搜索
def downImg(imgUrl, dirpath, imgName):
filename = os.path.join(dirpath, imgName)
try:
res = requests.get(imgUrl, timeout=15)
if str(res.status_code)[0] == "4":
print(str(res.status_code), ":" , imgUrl)
return False
except Exception as e:
print("抛出异常:", imgUrl)
print(e)
return False
with open(filename, "wb") as f:
f.write(res.content)
return True
urls=[]
while len(urls)
urls.clear()
dom = etree.HTML(driver.page_source)
for url in dom.xpath('//img[@class="main_img img-hover"]'):
urls.append(url.xpath(".//@data-imgurl")[0])
print(len(urls))
print("刷新...")
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") #滚到最底部
time.sleep(3)
for i in range(number):
downImg(urls[i],"./img/",str(i)+".jpg")
print('finish...')
driver.quit()
8、总结
1、selenium默认解析函数
tmp=find_element_by_xpath() #获取标签
tmp=find_elements_by_xpath()
tmp.get_attribute('href')) #获取属性
相对路径和绝对路径
2、将chrome驱动获取的内容转换成html
dom=etree.HTML(driver.page_source)
dom.xpath(//img) #获取标签
dom.xpath(.//@hearf) #获取当前标签下的属性
原文链接:https://blog.csdn.net/hqh131360239/article/details/108232926
python爬取文字和图片_Selenium_Chrome爬取文本和百度图片相关推荐
- python爬取文字编程_Python怎么爬取人人网新鲜事
Python怎么爬取人人网新鲜事 发布时间:2020-08-24 18:10:44 来源:亿速云 阅读:113 这篇文章将为大家详细讲解有关Python怎么爬取人人网新鲜事,文章内容质量较高,因此小编 ...
- python提取图片文字视频教学_Python学习第七天之爬虫的学习与使用(爬取文字、图片、 视频)...
一.爬虫记得基本方法 1.1 爬虫概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使 ...
- python爬取文字和图片_Python学习第七天之爬虫的学习与使用(爬取文字、图片、 视频)...
[toc] 一.爬虫记得基本方法 1.1 爬虫概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. ...
- 使用Python+xpath爬取知网所有中英文期刊的封面背景图片
使用Python+xpath+beautifulsoup爬取知网所有中英文期刊的封面背景图片` import json import requests from bs4 import Beautifu ...
- python爬取知乎话题_python爬取知乎话题图片
前言 什么是网络爬虫(也叫网络蜘蛛)?简单来说,是一种用来自动浏览万维网程序或脚本(网络爬虫的典型应用就是我们所熟知的搜索引擎).既然如此,那么我们也可以写一个程序,用来自动浏览或者获取网页上的信息. ...
- python爬虫:解决爬取文字时写入出现的NBSP(空格)现象
当我们爬取文字存储到txt文本时出现NBSP现在的解决方法.把空格去掉用str(remove).replace(u'\xa0', '')去解决 电影名称: 肖申克的救赎[NBSP] 电影名称: 霸王别 ...
- python爬取toefl_spark学习进度6-Python爬取数据的四个简单实例
今天本来想把昨天安装的intellij配置好,但是一直显示没有网络,网上查了相关资料也没有查出来解决办法. 然后暂停了intellij的配置,开始做了几个Python爬取简单数据的实例,先做了几个最简 ...
- python自动爬取更新电影网站_python爬取电影网站信息
一.爬取前提 1)本地安装了mysql数据库 5.6版本 2)安装了Python 2.7 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑 1)进入电影网列表页, 针对列表的ht ...
- 运用Python爬虫爬取一个美女网址,爬取美女图
运用Python爬虫爬取一个美女网址,爬取美女图 要运用到的python技术: 导入库 1.request 发送请求,从服务器获取数据 2.BeautifulSoup 用来解析整个网页的源代码 imp ...
- (爬取猫眼电影TOP100的电影信息(含图片、评分等))
爬取猫眼电影TOP100的电影信息(含图片.评分等) 让我们直接进入正题 1.导入需要的库 2.获取页面 3.分析页面 4.保存文件 全部代码 让我们直接进入正题 对猫眼电影的网站进行分析 其链接为: ...
最新文章
- Java五年,已财富自由,美人在手!
- ant 的 copy 使用
- JVM:常用调优命令
- Python教程:lambda,filter,map的运用
- @ConfigurationProperties注解的使用与@Value的使用
- 源码篇:Python 实战案例----银行系统
- 匿名用户访问用发布站点模板创建网站的列表项时要求登录的问题解决
- Spring核心知识点总结
- gdb调试多进程和多线程
- SQL Server 2008性能故障排查(二)——CPU
- Rust : 闭包、move、复制与移动语义
- Chrome插件——一键保存网页为PDF1.1发布
- openStreetMap数据分析举例-使用Qt统计城市科技指数排名
- Win7远程桌面 提示 登录没有成功解决方法
- 算法设计题3.34-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- H5调用Android原生Api
- H5 实现横向滚动的方法及需要注意的地方
- MySQL GROUP_CONCAT()函数的排序方法
- 三星 s4(i9502) android4.4rom 官方,三星S4(I9500)刷机包 Android4.4 官方精简 稳定流畅 极速省电 完整root权限 V1.0...
- tensorflow使用高阶api导致训练不收敛问题