在利用爬虫爬取页面HTML信息得时候有的当你运用request方法爬取时爬下来得HTML信息和网站信息不相符,这也导致以后得爬去无法进行,这也是反扒机制之一,解决办法时利用代码进行模拟网页点击,来爬去相应得信息。

注:以下代码以今日头条网站为例

具体代码如下:

import requests
from lxml import etree
import os
#模拟浏览器行为
from selenium import webdriver
from mysqldb import ConnectMysql
import pymysql
class Gevent_spider(object):
def get_html(self,url):
#根据网址为所获得的HTML文件命名
if url == 'https://www.toutiao.com/ch/news_image/':
file_name = 'toutiao.html'
else:
file_name = 'inner_pear.html'
#定义一个新的变量接收匹配后的值
html_content = ''
#使用os模块来判断文件是否存在 如果不存在直接写文件
if not os.path.exists(file_name):
 
#利用selenium方法来模拟人点击浏览器行为获取正式html
browser = webdriver.Chrome()
#get获取页面信息
browser.get(url)
#解码并进行赋值
html = browser.page_source.encode("utf-8").decode()
#设置等待时间 等待模拟器操作完成
time.sleep(5)
 
#将爬去的HTML写入文件
with open('./'+file_name,'w',encoding='utf-8') as f:
f.write(html)
#关闭模拟行为
browser.quit()
#对空变量进行赋值
html_content = html
#如果文件存在直接读取文件中的信息,
else:
with open('./'+ file_name,encoding='utf-8') as f:
contents = f.read()
#对空变量重新复制
html_content = contents
#将爬取的信息传入解析模板方法
self.xpath_html(html_content)
#定义解析方法
def xpath_html(self,html):
#利用LXML方法解析HTML
html = etree.HTML(html)
#匹配图片标签 因为图片标签隐藏在不同的层次下 所以匹配两个
img_list = html.xpath("//div[@class='image-wrap middle left']/img/@src")
img_list1 = html.xpath("//div[@class='image-wrap large']/img/@src")
#遍历其中一个图片列表 将其添加到另一个 已保证图片列表得完整性
for item in img_list1:
img_list.append(item)
#下载图片
for item in img_list:
#定义下载到得地址
path = "E:/头条/"
if os.path.exists(path):
 
filepath = requests.get('http://'+item.replace('//',''))
filepath1 = filepath.content
 
picname = item.split("/")[-1]
with open(path + "/" + picname+'.jpg',"wb") as f:
f.write(filepath1)
#匹配内页网址和标题
url_list = html.xpath("//ul[@class='imgList']/li/a/@href")
title_list= html.xpath("//p[@class='des']/text()")
 
#手动添加url 便利后添加到列表
url_list1 = []
for item in url_list:
item = 'https://www.toutiao.com' + item
url_list1.append(item)
#判断标题 去除空格
title_list1 = []
for item in title_list:
if item == " ":
pass
else:
title_list1.append(item)
# print(url_list1,"+++++++++",img_list,"+++++++++",title_list1)
# print(len(url_list1),"+++++++++",len(img_list),"+++++++++",len(title_list1))
#将匹配后得数据传到入库方法中
self.insert_db(url_list1,title_list1,img_list)
 
#定义写成入库方法
def insert_db(self,url_list1,title_list1,img_list):
#建立数据库连接
conn = pymysql.connect(host='localhost',user='root',password='mysql',database='mymac',charset='utf8')
#定义游标对象
cursor = conn.cursor()
#入库操作
for item in range(len(img_list)):
cursor.execute(" insert into `toutiao_spider` values ('%s','%s','%s') " % (url_list1[item],title_list1[item],img_list[item]))
conn.commit()
cursor.close()
conn.close()
 
#爬取内页
# def get_inner_data(self,list):
# for item in list:
# # print(item)
# browser = webdriver.Chrome()
# browser.get(item)
# html = browser.page_source.encode("utf-8").decode()
# time.sleep(5)
# browser.quit()
# html = etree.HTML(html)
# title = html.xpath("//div[@class='info-box-inner']/h2/text()")
# print(title)
#端点测试
# exit(-1)
#程序入口
if __name__ == "__main__":
#实例化对象
gevent_spider = Gevent_spider()
#调用方法并传相应参数
gevent_spider.get_html('https://www.toutiao.com/ch/news_image/')

mysqldb.py 文件具体代码:

#导包
import pymysql
#定义数据库公共类
class ConnectMysql(object):
#定义方法连接mysql
def connect_mysql(self):
#建立连接对象
conn = pymysql.connect(host='localhost',user='root',password='mysql',database='mymac',charset='utf8')
return conn

爬虫之selenium模拟点击的更多相关文章

  1. python爬虫:使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  2. Python使用selenium模拟点击(一)

    本文适合有点Python基础阅读,(没基础的话,相对的比较蒙蔽,争取能让小白能一步一步跟上来) 2019-03-05 14:53:05 前几天由于需要到一个网站进行签到~~听说Python能够模拟请求 ...

  3. Python使用selenium模拟点击(二)

    本篇文章是接着第一篇文章讲的 具体可看第一篇:https://www.cnblogs.com/whatarey/p/10477754.html 要实现功能>搜索完毕,自动点击 这个功能做的停操蛋 ...

  4. Python使用selenium模拟点击,进入下一页(三)

    嗯,昨天呢,我们已经实现了自动输入百度然后搜索Cgrain,然后点击按钮,进入我的页面,在这里呢,有个问题 ActionChains(seleniumGoo).move_by_offset(-480, ...

  5. python爬虫——用selenium爬取京东商品信息

    1.先附上效果图(我偷懒只爬了4页)  2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...

  6. 爬虫之动态HTML处理(Selenium与PhantomJS )动态页面模拟点击

    动态页面模拟点击 #!/usr/bin/env python # -*- coding:utf-8 -*- # python的测试模块 import unittest from selenium im ...

  7. selenium + firefox/chrome/phantomjs登陆之模拟点击

    登陆之模拟点击 工具:python/java + selenium + firefox/chrome/phantomjs (1)windows开发环境搭建 默认已经安装好了firefox 安装pip ...

  8. 使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据

    记录一次快速实现的python爬虫,想要抓取中财网数据引擎的新三板板块下面所有股票的公司档案,网址为http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995. ...

  9. 七、Selenium与phantomJS----------动态页面模拟点击、网站模拟登录

    每天一个小实例1(动态页面模拟点击,并爬取你想搜索的职位信息) from selenium import webdriver from bs4 import BeautifulSoup # 调用环境变 ...

随机推荐

  1. js 金额处理加小数点后两位

    function toDecimal2(x) { var f = parseFloat(x); if (isNaN(f)) { return false; } var f = Math.round(x ...

  2. es6 语法 (解构赋值)

    1.结构赋值 { let a,b,c; [a,b] = [1,2]; console.log(a,b); //1,2} { let a,b,rest; [a,b,...rest] = [1,2,3,4 ...

  3. elementUI vue v-model的修饰符

    v-model的修饰符 v-model.lazy 只有在input输入框发生一个blur时才触发 v-model.trim 将用户输入的前后的空格去掉 v-model.number 将用户输入的字符串 ...

  4. CSS实现两列布局,一列固定宽度,一列宽度自适应方法

    不管是左是右,反正就是一边宽度固定,一边宽度自适应. 博客园的很多主题也是这样设计的,我的博客也是右侧固定宽度,左侧自适应屏幕的布局方式. html代码: <div id="wrap& ...

  5. Salesforce 大量数据部署的最佳实践

    本文参考自官方文档.原文链接 大量数据部署对Salesforce的影响 当用户需要在Salesforce中部署大量数据的时候,部署的过程往往会变慢.这时就需要架构师或开发者设计出更好的过程来提高大量数 ...

  6. wap2app(一)-- 网站快速打包成app

    工具:HBuilder,下载地址:http://www.dcloud.io/ 下载并安装HBuilder后,打开编辑器,选择:文件 -> 新建 -> 项目,出现如下图: 选择wap2app ...

  7. DAY9(PYTHON)

    li=[{'usename':'xiaowang'}, {'} ] board=['张三','李四','王大麻子'] while 1: usename = input('用户名:') if usena ...

  8. ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用

    一.前言 1.本文主要内容 Visual Studio Code 开发环境配置 使用 ASP.NET Core 构建Web应用 ASP.NET Core Web 应用启动类说明 ASP.NET Cor ...

  9. turnserver 配置说明记录

    coTurn工程提供了较完整的STUN和TURN服务,记录其主要的命令行参数配置说明 针对TURN/STUN服务进程turnserver.exe的使用参数做简单说明 -L 监听的IP地址 -p 监听端 ...

  10. 使用fiddler对手机上的程序进行抓包

    用fiddler对手机上的程序进行抓包,网上有很多的资料,这里写一下来进行备用.   前提: 1.必须确保安装fiddler的电脑和手机在同一个wifi环境下 备注:如果电脑用的是台式机,可以安装一个 ...