在利用爬虫爬取页面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. Future FutrueTask Callable类源码说明以及原理使用

    1.Future Callable FutureTask 源码说明 JDK内置的Future主要使用到了Callable接口和FutureTask类. Callable是类似于Runnable的接口, ...

  2. Android-textview图文混排(网络图片)

    工作太忙,不做过多的解释了,核心是用到了 SpannableStringBuilder  Glide  和 Rxjava 直接上代码了,就两个类. public class ImageSpanAsyn ...

  3. Key Lookup开销过大导致聚集索引扫描

    以前总结过一篇文章SQL SERVER中什么情况会导致索引查找变成索引扫描 介绍了几种索引查找(Index Seek)变成索引扫描(Index Scan)的情形.昨天写一篇文章的时候,也遇到了一个让人 ...

  4. C# WINFORM 应用程序动态读写xml config文件,获取数

    在实际项目里,我们需要用一个应用程序去连接多个数据库,有的进行测试,有的是数据库基本结构相同,数据不同, 我们不可能总去程序的连接字符串里去修改,更不能让用户去修改,所以需要动态去修改连接数据库配置信 ...

  5. 探索SQL Server元数据(二)

    背景 上一篇中,我介绍了SQL Server 允许访问数据库的元数据,为什么有元数据,如何使用元数据.这一篇中我会介绍如何进一步找到各种有价值的信息.以触发器为例,因为它们往往一起很多问题. 那么如何 ...

  6. python 爬虫(一) requests+BeautifulSoup 爬取简单网页代码示例

    以前搞偷偷摸摸的事,不对,是搞爬虫都是用urllib,不过真的是很麻烦,下面就使用requests + BeautifulSoup 爬爬简单的网页. 详细介绍都在代码中注释了,大家可以参阅. # -* ...

  7. Qt在多线程中使用信号槽的示例

    之前对线程理解得不深入,所以对Qt的线程机制没有搞清楚,今天写一篇文章总结一下,如有错误,欢迎指出. 首先需要理解线程是什么,线程在代码中的表现其实就是一个函数,只不过这个函数和主线程的函数同时运行, ...

  8. C语言经典例题(菜鸟教程100例)

    学习c语言基础,怎么能少了菜鸟教程上的100道例题呢,这里整理一下每道题的链接,希望大家能享受学习的乐趣 1,有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2,企业发放 ...

  9. ASP.NET -- WebForm -- 给图片添加水印标记

    ASP.NET -- WebForm: 给图片添加水印标记 ASP.NET:使用 WebForm(C#) 制作一个简单的为图片添加水印的页面. 1. Test2.aspx文件 <%@ Page ...

  10. react 之 reflux 填坑

    注意:老铁些,在看这篇文章的之前,最好了解一下react 的全局状态管理库哦,不然可能会坐飞机. ^_^ React 之reflux (它是一个功能模块,需要安装引入): import Reflux ...