优化这段代码:import requests import pandas as pd from bs4 import BeautifulSoup from lxml import etree import time import pymysql from sqlalchemy import create_engine from urllib.parse import urlencode # 编码 URL 字符串 start_time = time.time() #计算程序运行时间 def get_one_page(i): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36' } paras = {'reportTime': '2023-03-23', #可以改报告日期,比如2018-6-30获得的就是该季度的信息 'pageNum': i #页码 } url = 'http://s.askci.com/stock/a/?' + urlencode(paras) response = requests.get(url,headers = headers) if response.status_code == 200: return response.text return None except RequestException: print('爬取失败') def parse_one_page(html): soup = BeautifulSoup(html,'lxml') content = soup.select('#myTable04')[0] #[0]将返回的list改为bs4类型 tbl = pd.read_html(content.prettify(),header = 0)[0] # prettify()优化代码,[0]从pd.read_html返回的list中提取出DataFrame tbl.rename(columns = {'序号':'serial_number', '股票代码':'stock_code', '股票简称':'stock_abbre', '公司名称':'company_name', '省份':'province', '城市':'city', '主营业务收入(201712)':'main_bussiness_income', '净利润(201712)':'net_profit', '员工人数':'employees', '上市日期':'listing_date', '招股书':'zhaogushu', '公司财报':'financial_report', '行业分类':'industry_classification', '产品类型':'industry_type', '主营业务':'main_business'},inplace = True) return tbl def generate_mysql(): conn = pymysql.connect( host='localhost', user='root', password='******', port=3306, charset = 'utf8', db = 'wade') cursor = conn.cursor() sql = 'CREATE TABLE IF NOT EXISTS listed_company (serial_number INT(20) NOT NULL,stock_code INT(20) ,stock_abbre VARCHAR(20) ,company_name VARCHAR(20) ,province VARCHAR(20) ,city VARCHAR(20) ,main_bussiness_income VARCHAR(20) ,net_profit VARCHAR(20) ,employees INT(20) ,listing_date DATETIME(0) ,zhaogushu VARCHAR(20) ,financial_report VARCHAR(20) , industry_classification VARCHAR(20) ,industry_type VARCHAR(100) ,main_business VARCHAR(200) ,PRIMARY KEY (serial_number))' cursor.execute(sql) conn.close() def write_to_sql(tbl, db = 'wade'): engine = create_engine('mysql+pymysql://root:******@localhost:3306/{0}?charset=utf8'.format(db)) try: tbl.to_sql('listed_company2',con = engine,if_exists='append',index=False) # append表示在原有表基础上增加,但该表要有表头 except Exception as e: print(e) def main(page): generate_mysql() for i in range(1,page): html = get_one_page(i) tbl = parse_one_page(html) write_to_sql(tbl) # # 单进程 if __name__ == '__main__': main(178) endtime = time.time()-start_time print('程序运行了%.2f秒' %endtime) # 多进程 from multiprocessing import Pool if __name__ == '__main__': pool = Pool(4) pool.map(main, [i for i in range(1,178)]) #共有178页 emdtime = time.time()-start_time print('程序运行了%.2f秒' %(time.time()-start_time))
时间: 2023-05-24 12:06:36 浏览: 223
这段代码已经很简洁了,但是可以通过以下方式进行优化:
1. 导入模块时可以将相同的模块放在一起,如将requests和pandas放在一起,将BeautifulSoup和lxml放在一起。
2. 导入模块时可以只导入需要的部分,如只导入urlencode函数。
3. 可以将函数或代码段封装成函数或类,使代码结构更清晰。
相关问题
解释这个代码在爬虫程序的作用:import pymysql import requests import re import pandas as pd from bs4 import BeautifulSoup
这段代码是在Python中导入了pymysql、requests、re、pandas和BeautifulSoup模块。这些模块都是用于爬虫程序的核心模块。
- pymysql是Python操作MySQL数据库的模块,可以用于爬虫程序中的数据存储;
- requests是HTTP库,可以用于爬取网页数据;
- re是Python中的正则表达式模块,可以用于从HTML文本中提取数据;
- pandas是数据处理库,可以用于在爬取数据后进行数据清洗和分析;
- BeautifulSoup是HTML和XML解析库,可以用于从HTML文本中提取数据。
这段代码的作用是导入这些模块,为后续的爬虫程序提供支持。
请帮我解释一下这段代码:import requests from bs4 import BeautifulSoup import time import pymysql import pandas as pd import numpy as np import matplotlib.pyplot as plt from travel_save_file import * import re for page in range(1,200): print(page) time.sleep(
这段代码是一个Python脚本,主要功能是爬取一个旅游网站的数据,并将数据存储到MySQL数据库中。具体解释如下:
1. `import`语句用来导入需要用到的Python模块,包括`requests`、`bs4`、`time`、`pymysql`、`pandas`、`numpy`、`matplotlib.pyplot`、`travel_save_file`和`re`。
2. `for`循环用来遍历旅游网站的200个页面,每次循环都会爬取一个页面的数据。
3. `print`语句用来输出当前循环的页面数。
4. `time.sleep()`函数用来控制爬取每个页面之间的时间间隔,避免爬取过快被网站封IP。
5. `requests.get()`函数用来向旅游网站发送GET请求,获取页面的HTML源代码。
6. `BeautifulSoup`模块用来解析HTML源代码,提取需要的数据。
7. `re`模块用来进行正则表达式匹配,提取需要的数据。
8. `pymysql`模块用来连接MySQL数据库,并将数据存储到数据库中。
9. `pandas`和`numpy`模块用来处理数据,例如将数据转换为DataFrame格式,进行数据筛选和统计等操作。
10. `matplotlib.pyplot`模块用来绘制数据图表,展示数据分布和趋势等信息。
11. `travel_save_file`模块是自定义的模块,用来将爬取到的数据存储到本地文件中。
阅读全文