python制作动态网站_python入门-爬取动态网站

news/2024/5/17 18:47:01/文章来源:https://blog.csdn.net/weixin_39769675/article/details/109941167

一、缘起

跟林同学一起学了 python 一周左右的时候,她开始做她的毕业设计,去爬一个网站 。

由于我们都还没接触过动态网站(这里简单的认为是用 ajax 去加载数据的),所以用爬静态网站的方法肯定行不通啦。

然后我查了一小时才发现是数据是动态加载的(真够菜的。。)

二、过程

后来查查资料,发现爬动态网站常用的就几种方法:

1,分析 ajax 请求、参数等,用爬静态网站的方法,直接拿 json 数据。

2,使用 splash 爬取

3,使用 selenium 模拟鼠标操作,去爬取相关数据

第一种方法比较简单,只是分析请求稍微有点费时。林同学用半个小时就用 scrapy 搞定了,才几行代码而已。。

import requests

url = 'http://app.gdstc.gov.cn/sjkf/kjxm'

data = {

'const_dict_id': 10203,

'start': 60,

'length': 30,

}

headers = {'User-Agent': 'Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1',

"Cookie": "BAIDUID=4650B0B34048BBAA1E0B909B42F5A564:FG=1; BIDUPSID=4650B0B34048BBAA1E0B909B42F5A564; PSTM=1537177909; BDUSS=w0VmEzUFFWTTh0bld5VWVhNVo5MEEyV2ZKdTk3U2stMGZmWVQ1TTRuSnVkOHBiQVFBQUFBJCQAAAAAAAAAAAEAAAD0GzcNaG9uZ3F1YW4xOTkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG7qoltu6qJbTk; pgv_pvi=6774493184; uc_login_unique=19e6fd48035206a8abe89f98c3fc542a; uc_recom_mark=cmVjb21tYXJrXzYyNDU4NjM%3D; MCITY=-218%3A; cflag=15%3A3; SIGNIN_UC=70a2711cf1d3d9b1a82d2f87d633bd8a02893452711; locale=zh; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1539333192; from_lang_often=%5B%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%2C%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%5D; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; to_lang_often=%5B%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%2C%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%5D; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1539333307",

}

response = requests.get(url, params=data, headers=headers, timeout=10)

print(response.url)

print(response.status_code)

if response.status_code == 200:

content = response.text

print(content)

然而,我用第二种方法,搞了两个小时,还只能拿到第一页的数据,无法拿到翻页的数据。林同学为她拿到数据而开心的时候,我还在很烦躁地 debug。。

后来,我用了第三种方法,终于还是搞定了。代码如下:

import re

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from bs4 import BeautifulSoup

import pymysql

#创建连接

conn = pymysql.connect(

host='localhost', #主机名

port=3306, #端口号(默认的)

user='root', #用户名

passwd='', #密码

db='technology', #数据库名,需要先自己手动新建

charset='utf8', #这里设置编码是为了输出中文

)

#获取cursor

cur = conn.cursor()

browser = webdriver.Chrome()

wait = WebDriverWait(browser, 10)

url = "http://app.gdstc.gov.cn/app/sjkf/kjxm_10203.jsp"

def start():

print('--started--')

try:

browser.get(url)

# 等待 ajax 加载完成

numbers = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#listTable_paginate > ul > li:nth-child(8) > a")))

get_infos()

return numbers.text

except TimeoutError:

return start()

def next_page(page_number):

print('--paging--')

try:

# 模拟点击下一页

next = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#listTable_next > a")))

next.click()

# 等待 ajax 刷新完成

wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#listTable_paginate > ul > li.paginate_button.active"), str(page_number)))

get_infos()

except TimeoutError:

next_page()

def get_infos():

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#listTable_wrapper #listTable")))

html = browser.page_source

soup = BeautifulSoup(html, "html.parser")

trs = soup.select("tr[role='row']")

for tr in trs[1:]:

info = []

for td in tr:

# print(td.text)

info.append(td.text)

save_to_mysql(info)

# 需要自己先手动建一个 infos 的表,关有相关字段

def save_to_mysql(info):

sql = "insert into infos (name, location, firstTime, validTime) values ('%s', '%s', '%s','%s')" % (info[0], info[1], info[2], info[3])

try:

# 执行sql语句

cur.execute(sql)

# 提交到数据库执行r

conn.commit()

except Exception as e:

print('--Save To MYSQL Error--', e)

# Rollback in case there is any error

conn.rollback()

def main():

try:

total = start()

for i in range(2, int(total) + 1):

next_page(i)

except Exception as e:

print('--Error Occurred--', e)

finally:

# 关闭数据库连接

cur.close()

conn.close()

browser.close()

print('--ended--')

if __name__ == '__main__':

main()

三、后记

写这篇文章主要是为了记录一下我枯燥的学习过程。

四月份前两周主要在学机器学习,那时候觉得,要学的知识又多又难,我学习效率又低,智商也低,真的压力好大。可惜只坚持了两周就不行了。感觉比考研前一个月还累。晒一下前两周的学习时间表:

ef9db6fac2fc?from=timeline&isappinstalled=0

学习时间表.png

然后这几天主要在学 python 爬虫。

入门 python 爬虫比入门机器学习简单一百倍。。于是现在经常睡到自然醒,无聊了就看电影,做条咸鱼,真是太舒服了。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_763517.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache php mysql架构图_Linux-Apache-MySQL-PHP网站架构方案分析

LAMP>(Linux-Apache-MySQL-PHP)网站架构>是古朝国际盛行的Web>框架>,该框架包露:Linux>操做系统,Apache>支散>办事器>,MySQL>>数据>库,Perl、PHP>梗概Python编程道话>&#xf…

上网登录窗不弹出_你的密码容易被人知道,登录网站时千万要留心这个!

可能很多小伙伴在电视、新闻里面都看过,说XX人在登录网页的时候密码被不法分子窃取,随后安全人士的诸多建议中,其中有一条大意是这样的:要注意网站的网址是https开头,而不是http。如果少了结尾这个“s”,就…

51 个漂亮的电子商务网站设计分享

51个漂亮的电子商务网站设计,让你在频繁的设计中能获得一些灵感。hnyei寒意 Morphica Me & Mommy-to-be Bridge 55 Bestlacewigs Free People UNIQLO Big Brown Box Junstil Little Catwalk Shoon Keedo Bagolitas Shop Curious Itself La Llevo Puesta CellyShop Wunderbl…

iis使用nginx实现网站负载(转)

iis使用nginx实现网站负载(转) 如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧。做网站负载可以买硬件…

curl网站开发指南

原文链接:http://www.ruanyifeng.com/blog/2011/09/curl.html 作者: 阮一峰 日期: 2011年9月 4日 我一向以为,curl只是一个编程用的函数库。 最近才发现,这个命令本身,就是一个无比有用的网站开发工具&…

java抓取并保存图片_利用JAVA抓取网站的所有图片并保存于本地

由于今天我要保存一个网页上的所有图片并做一个ppt,但是这个网页比较蛋疼,是微信上的一个类似于动画的东西,所以没法保存整个网页然后直接取照片,所以我采用java写了一个程序,采用类似于网络爬虫的思路把照片的抓下来。…

网站黑色字体php,字体颜色怎么变成黑色

字体颜色变成黑色的方法:首先打开Word文档窗口,选中需要改变字体颜色的文本块;然后在“开始”功能区的“字体”分组中,单击“字体颜色”下拉三角按钮;接着打开字体颜色面板;最后在“主题颜色”中选择“黑色…

移动网站设计与开发的碎碎念

2019独角兽企业重金招聘Python工程师标准>>> 移动开发的快速发展让移动用户使用移动设备变得更容易。人们通过使用移动设备可以很容易地访问移动网页。根据最近的一项研究,超过6300万的美国人通过移动设备访问不同的移动网站,其数量预计到201…

asp抓取网页某个标签内的_必须要了解SEO常用标签,你都知道几个?

很多人将SEO看作一份非常简单的工作,认为只需要更新一下网站内容,发发外链就可以了。殊不知,你之所以做不好这份工作,就是因为如此。SEO其实是一个比较复杂且长期的过程,涉及的方面很多,需要掌握的知识也不…

Project Server 2013新手入门 (一)为PWA添加用户并分享网站

之前做过Project server 2013的很多测试,一直没发上来。现在终于想着能写点自己会的东西,都比较简单,我也是新手。之前测试的文档我会陆续的发上来,供新人参考,有不懂的,大家也可一起讨论。我这里就不先写什…

一键部署网站php源码,如何轻松建站?站点一键部署搭建(详细教程)

来越多的人选择个人建站,个人站长虽然门槛很低,但是有些朋友觉得Linux服务器各种复杂的命令脚本让自己没法搭建环境。今天就给大家推荐一款使用方便、功能强大的快速建站工具——云帮手,支持 Linux 与 Windows 系统,可一键配置搭建…

多媒体开发之---一个破解版的迅雷云点播网站

国庆放假后,周六加一天班 ,周日本来是搞学习的,后面看到,最近比较火的,我有比较喜欢的喜剧 导演宁浩 ,就骨粉搜搜,居然搜到了资源,没得,资源是比较多,有什么吉…

网站开发笔记【四】css hack技术

1.如何让文字居中显示 类型 单行文字单行文字可以设置line-height和height一样。 多行文字(高度不固定) 可以设置padding在外层的包容容器中。 如:设置padding:25px;这样高度就会显示在居中。 多行文字&#xff08…

java服务端性能优化_[读书笔记] 大型网站性能优化实战-服务端性能优化

1 QPS (吞吐量)1.1 RT(ResponseTime,响应时间)服务器端 RT网络开销 ≈ 客户端 RT。对于网络来讲,常见的优化方式有 CDN、 AND和专线, 分别适用于不同的场景。服务器端 RT Thread CPU Time Thread Wait Time。单线程 QPS 1000ms / RT。多线…

java开源 mooc,GitHub - bo5509/TinyMooc: 轻量级Java平台在线幕课学习网站

萌课(tinymooc)是什么?tinymooc 中文名萌课,是一个轻量级Web网站。它拥有简洁的代码,优雅的设计。萌课网目前打算实现微课程的点播和直播服务,依托于腾讯云强大的云计算服务给用户带去更好的微课学习体验。如果你喜欢,欢迎 Star and Fork, 谢谢!特性轻量级。代码简…

PHP-购物网站开发设计(一)

2015-07-6 开始使用PHP完成简单购物网站的设计,首先要选择合适的软件平台,所以今天先记录平台的选择与搭建: 我选择使用Apache24 PHP 5.6 MySQL 开发环境完成PHP网站开发,软件开发IDE使用PhpStorm8.0.3。 平台搭建过程如下&…

简单网站新闻发布系统

写这篇文章的时候首先要向bben_h 和jdxx表示感谢,是bben_h提出了C#中字符替换这个问题,jdxx很好的解决了这个问题,同时也使我想起以前做的一些程序(简单网站新闻发布系统),现在就把它奉献给大家&#xff0c…

VS2005在开发网站时的一个编译BUG

这两天我在用C#做一个WEB网站,用的是VS2005,碰到一个编译问题,害我查了很长时间,终于找到原因了-_- 放上来,如果有碰到相同问题的兄弟正好看看。现象:编译时,当页面对应的cs文件有错误时&#…

中小型企业网络规划设计方案_中小型企业做品牌网络营销推广时要注意什么问题?【seo专吧】...

许多中小型企业想要网络营销,但是想开展起来就总有困难:不知道怎么宣传、不知道宣传什么、不知道用什么渠道宣传,今天,全网天下的徐国祥就跟大家讲讲。1、前期准备工作要充足万事开头难,所以事前要先分析考虑企业的自我…

环球企业家《信息网站的未来》

环球企业家原文标题:我知道明年夏天你做了什么原文作者:倪妮原文地址:《信息网站的未来》是网易科技刊登时的标题。注:以下仅截取提及玩聚网的部分文字。作者:倪妮 出处:《环球企业家》2009年2月20号刊 第3…