在利用爬虫爬取页面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. JavaScript for/in 语句 遍历数组内容

    for-in遍历 for-in是为遍历对象而设计的,不适用于遍历数组. 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1" ...

  2. django请求和响应

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88096341 HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建 ...

  3. easyUI按钮图表对照大全

    easyUI图标与对照类的对应关系:

  4. Android Studio 无法预览xml布局视图:failed to load AppCompat ActionBar with unkNown error

    问题如下: 解决方法: 找到res-->values-->styles.xml 文件 可以看到主题Them设置如下: 修改为: 界面预览可以正常显示

  5. Android为TV端助力 MediaPlayer API大全已经方法详解(转载)

    通过这张图,我们可以知道一个MediaPlayer对象有以下的状态: 1)当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后,它就处于Idle状态.当调用了rele ...

  6. recovery 下界面UI旋转90 180 270修改

    原文修改出自简书:https://www.jianshu.com/p/768fdd954061 应该是MTK修改的google源码,支持recovery下屏幕旋转90/180/270, 作者把MTK的 ...

  7. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  8. 看到一个想收藏的的AJAX小列子

    用户登录的验证可以使用 form 表单提交,也可以使用 ajax 技术异步提交. AJAX 即 Asynchronous Javascript And XML(异步 JavaScript 和 XML) ...

  9. eclipse版本对应名称以及下载地址

        Eclipse 1.0         2001年11月7日(Win32/Linux32 Motif) Eclipse 2.0         2002年6月27日(Linux32 Motif ...

  10. python 进程介绍 进程简单使用 join 验证空间隔离

    一.多道程序设计技术(详情参考:https://www.cnblogs.com/clschao/articles/9613464.html) 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行 ...