多线程爬取房天下数据,并且存储到mysql

下面是源代码,大神勿喷。。。。。。

# -*- coding: utf-8 -*-

import requests,time,urllib.request,os,re,xlwt

import threading,random,threadpool

import pymongo,pymysql,logging

from multiprocessing import Process

from lxml import etree

from pymongo import MongoClient

import log

user_agent_list = [ \

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" ,\

"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", \

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", \

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", \

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", \

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", \

"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", \

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \

"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \

"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", \

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", \

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"

]

url = ‘http://newhouse.sz.fang.com/house/s/b911/?ctm=1.sz.xf_search.page.9‘

workbook = xlwt.Workbook()

sheet = workbook.add_sheet("Sheet Name")

#sheet.write(0, 2, ‘foobar‘)# row, column, value

#workbook.save("foobar.xls")

#links = re.findall(‘"((http|ftp)s?://.*?)"‘, str(html.text))#获取网站所有url的正则表达式

#client = MongoClient(‘localhost‘,int(27017))#链接数据库

class Ft(object):

#def __init__(self,url):

#self.url = url

def save_mysql(self,d_t):

for i in d_t:

for ii in i:

lk = str(i[0])

ad = str(i[1])

ade = str(i[2])

pe = str(i[3])

phe = str(i[4])

conn = pymysql.connect(host=‘192.168.191.1‘, user=‘root‘, passwd=‘123456789‘, db=‘data‘, port=3306,

charset=‘utf8‘)

cur = conn.cursor()  # 获取一个游标

sql = ‘‘‘INSERT INTO ftx(link,adr,adress,price,phone)VALUES("%s","%s","%s","%s","%s")‘‘‘ %(lk, ad, ade, pe, phe)

cur.execute(sql)

data = cur.fetchall()

cur.close()  # 关闭游标

conn.commit()  # 事务提交

conn.close()  # 释放数据库资源

def get_data(self,url):

headers={}

addr = []

url_2 = ‘http://newhouse.gz.fang.com/house/s/b9‘+ str(url) + ‘/?ctm=1.gz.xf_search.page.6‘

url_1 = ‘http://newhouse.sz.fang.com/house/s/b9‘+ str(url) + ‘/?ctm=1.sz.xf_search.page.9‘

headers[‘User-Agent‘] = random.choice(user_agent_list)

try:

html = requests.get(url_2, headers=headers)

html.encoding = ‘gbk‘

if html.status_code == 200:

log.kk(‘下载网页数据成功‘)

else:

print(‘下载失败!!!‘)

except requests.exceptions.ReadTimeout as e:

log.gg.kk(e)

selector = etree.HTML(str(html.text))

links = selector.xpath(‘//div[@class="nlc_img"]/a/@href‘)

addrnames = selector.xpath(‘//div[@class="nlcd_name"]/a/text()‘)

for i in addrnames:

addr.append(i.strip())

addrs = selector.xpath(‘//div[@class="address"]/a/@title‘)

prices = selector.xpath(‘//div[@class="nhouse_price"]/span/text()‘)

tels = selector.xpath(‘//div[@class="tel"]/p/text()‘)

r = list(zip(links, addr, addrs, prices, tels))

print(r)

self.save_mysql(r)

def save_data(self,get_dat):

client = MongoClient(‘localhost‘, int(27017))  # 链接mongodb数据库

def log(self):

logging.basicConfig(level=logging.DEBUG,

format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,

datefmt=‘%a, %d %b %Y %H:%M:%S‘,

filename=‘myapp.log‘,

filemode=‘w‘)

logging.debug(‘This is debug message‘)

logging.info(‘This is info message‘)

logging.warning(‘This is warning message‘)

if __name__=="__main__":

dt = Ft()

gd = dt.get_data

pool = threadpool.ThreadPool(50)

reqs = threadpool.makeRequests(gd,range(2))

[pool.putRequest(req) for req in reqs]

pool.wait()

下面附上建表代码:

create table ftx(

id int not null auto_increment,

link varchar(100) not null,

adr varchar(100) not null,

adress varchar(100) not null,

price varchar(100) not null,

phone varchar(100) not null,

PRIMARY KEY (id )

);

alter table ftx modify column price varchar(100) character set utf8 not null #修改字段的字符集

值得注意的是:在插入数据的时候,记得要相关字段的字符集变成utf8,否则会报错,最好刚开始建表就指定该表的字符集为utf8

				
时间: 2024-10-13 23:26:58

多线程爬取房天下数据,并且存储到mysql的相关文章

Python爬虫爬取房天下数据-入MySql数据库

Python爬取房天下某城市数据 随着互联网时代的兴起,技术日新月异,掌握一门新技术对职业发展有着很深远的意义,做的第一个demo,以后会在爬虫和数据分析方便做更深的研究,本人不会做详细的文档,有哪里不足的地方,希望大牛们指点讲解.废话不多说,上代码. 你需要的技能: (1)对前端知识熟悉会调试浏览器 (2)熟练python基础知识,对一些常用的库熟练掌握 (3)掌握一般关系型数据库 import requests as req import time import pandas as pd f

详解Python 采用 requests + Beautiful Soup 爬取房天下新楼盘推荐

最近一直在关注Python写爬虫相关的知识,尝试了采用requests + Beautiful Soup来爬取房天下(原搜房网)的推荐新楼盘. 不用不知道,一用发现有惊喜也有惊吓,本文就一同记录下惊喜和踩的一些乱码的坑. 首先,觉得Beautiful soup解析网页更加符合人类的常规思维,比使用正则表达式(python中的re库)更容易理解. 同时关于requests遇到了中文字符和特殊字符解码的问题.本文都将给于深入的解说. 软件环境 Python    : 3.6.0 PyCharm: C

Python 爬取 房天下

... import requests from requests import ConnectionError from bs4 import BeautifulSoup import pymongo #MongoDB的配置 MONGO_URL = 'localhost' MONGO_DB = 'Fangtianxia' MONGO_TABLE = 'HouseInfo' #配置MongoDB client = pymongo.MongoClient(MONGO_URL) db = clien

Python3.5爬取cbooo.cn数据并且同步到mysql中

#!/usr/local/bin/python # -*- coding: utf-8 -*- # Python: 3.5 # Author: wucl(),zhenghai.zhang # Program: 爬取CBO网站上所有电影的名称并写入数据库. # Version: 0.1 # History: 2017.10.25 import requests,time, pymysql, re, datetime from exchangelib import DELEGATE, Account

Python3.5爬取豆瓣电视剧数据并且同步到mysql中

#!/usr/local/bin/python # -*- coding: utf-8 -*- # Python: 3.5 # Author: [email protected] # Program: 爬取豆瓣网站上所有电视剧的名称并写入数据库. # Version: 0.1 # History: 2017.11.01 import requests,time, pymysql, re, datetime, json from exchangelib import DELEGATE, Accou

实现多线程爬取数据并保存到mongodb

多线程爬取二手房网页并将数据保存到mongodb的代码: import pymongo import threading import time from lxml import etree import requests from queue import Queue index_url='https://m.lianjia.com/gz/ershoufang/pg{}/' detail_url='https://m.lianjia.com{}' # 设置爬取主页的页数 INDEX_PAGE_

Python爬虫入门教程: All IT eBooks多线程爬取

All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来. 然后放着,是的,就这么放着.......然后慢慢的遗忘掉..... All IT eBooks多线程爬取-爬虫分析 打开网址 http://www.allitebooks.com/ 发现特别清晰的小页面,一看就好爬 在点击一本图书进入,发现下载的小链接也很明显的展示在了我们面前,小激动一把,这么清晰无广告的

多线程爬取糗事百科热门段子 (改写前天的博客)

利用多线程爬取,除了先前用到的几个模块之外,还需用到threading模块和queue模块: 为每一件事情开启一个线程:构造url_list.发送请求.提取数据.保存数据 __init__方法添加三个实例属性队列分别存放:url.响应内容.处理后的数据 改写原先每一个方法里的代码,需要的东西直接从队列中取出,此时方法都无需多余参数了 每当从一个队列取出数据,记得执行task_done()方法,使计数减一 run()方法里把yaozhixing的事情都开启一个线程,比较慢的事情,比如网络请求,可以

多线程爬取小说时如何保证章节的顺序

前言 爬取小说时,以每一个章节为一个线程进行爬取,如果不加以控制的话,保存的时候各个章节之间的顺序会乱掉. 当然,这里说的是一本小说保存为单个txt文件,如果以每个章节为一个txt文件,自然不会存在这种情况. 不仅仅是小说,一些其他的数据在多线程爬取时也有类似情况,比如: 漫画:漫画其实是由大量图片组成,一般一本漫画会保存为一个pdf文件,在此过程要保证图片的顺序. 视频:现在网络上的视频大部分是由多个ts文件拼合,最后保存为一个mp4文件,要保证ts文件的顺序. 它们都有一个共同的特点,那就是