談談初學爬蟲時候踩得坑

2021-09-23 07:51:53 字數 4169 閱讀 1863

1,連線資料庫

db = pymysql.connect("141.48.149.241","root","ettewewt","ku")

cursor = db.cursor()

上面這段話執行完成後會自動連線並且建立資料庫"ku",

2,建資料庫表

t_name = "tb_name"

try:

cursor.execute("create table if not exists %s (id varchar(50) primary key,title varchar(255) not null,abstract varchar(255),time varchar(50),videourl text(0), getdate varchar(50))charset utf8 collate utf8_general_ci" %t_name)

print("成功建立資料庫")

except:

print("準備開始新增資料")

上面可能不需要用try-except包住建立表語句,因為我建立表語句加了if not exists,不存在就建立 名為t_name的表

3,判斷資料是否存在然後插入資料

sql = "select * from %s "%t_name + "where id = '%s'"%id

cursor.execute(sql)

resulut = cursor.fetchall()

if len(resulut) == 1:

print(id+"存在")

else:

try:

insert= ("insert into %s"%t_name+"(id,title,abstract,time,videourl,getdate)" "values(%s,%s,%s,%s,%s,%s)")

data = (id,title,abstract,time,videourl,getdate)

cursor.execute(insert,data)

db.commit()

print("ok!")

except:

print(id+"資料插入失敗")

首先寫了乙個查詢語句, 查詢一開始建立表的表主鍵中是否存在我設定的主鍵,如果資料庫存在這條資料,那麼查詢結果result的長度就是1,所以對這個len進行判斷,當len!=1時候執行插入語句,因為我的插入語句都是變數,與%s一一對應匹配

有一些網頁使用ajax記載資料或者表單,此時需要f12在xhr裡面找到真正進行資料傳輸的的方法,然後根據這個方法裡面的header,formdata進行資料請求

#********************=定義請求頭,請求表單資料以及url  start********************=

headers=

data_search=

url = ""

#********************=定義請求頭,請求表單資料以及url end********************=

定義好請求頭header、data後

r = requests.post(url,data_search,headers = headers)

vodjson = json.loads(r.text)#得到獲取的所有json資料

videocount = vodjson["page"]["count"]#獲取json資料中指定的引數資料

重啟瀏覽器然後可以嘗試一下下面的例子

from selenium import webdriver

from selenium.webdriver.common.by import by

from selenium.webdriver.common.keys import keys

from selenium.webdriver.support import expected_conditions as ec

from selenium.webdriver.support.wait import webdriverwait

browser = webdriver.chrome()

# 開啟谷歌瀏覽器

try:

browser.get('')

input = browser.find_element_by_id('kw')

# 找到kw這個元素

input.send_keys('python')

# 敲入python

input.send_keys(keys.enter)

# 敲入回車

wait = webdriverwait(browser, 10)

# 等待

wait.until(ec.presence_of_element_located((by.id, 'content_left')))

# 等待元素被載入出來

print(browser.page_source)

finally:

browser.close()

需要獲取的王爺中可能會包括一些**資料,table等,如果自己乙個乙個分析的話會非常的麻煩,下面這個直接將所有的行設定為乙個list,直接取單行資訊即可

trs = soup.select('.data_table tr')#找到對應table中的tr

del trs[0]#這是為了刪除表頭

#重要的是這個將**資訊拆分

for tr in trs:

tds = tr.find_all('td')

td = [x for x in tds]

xlsname = getdate+"時rew.xlsx"

df=pd.dataframe()

workbook=xlsxwriter.workbook(xlsname)

worksheet=workbook.add_worksheet()

format_columname=workbook.add_format()#設定**樣式

format_row = workbook.add_format()

worksheet.set_column("a:a", 15)#設定寬度

worksheet.set_column("b:b", 15)

worksheet.set_column("c:c", 20)

worksheet.set_column("d:d", 15)

worksheet.set_column("e:e", 15)

worksheet.set_column("f:f", 15)

worksheet.write#函式寫入第一行列名,引數分別表示行、列、資料、資料格式。

for col in range(len(df.columns)):

worksheet.write(0,col,df.columns[col],format_columname)

for row in range(7):

worksheet.write(row+1,0,df.asin[row],format_row)

for row in range(7):

worksheet.write(row + 1, 1, df.allreview[row],format_row)

for row in range(7):

worksheet.write(row + 1, 2, df.newdate[row],format_row)

for row in range(7):

worksheet.write(row + 1, 3, df.review2017[row],format_row)

for row in range(7):

worksheet.write(row + 1, 4, df.review2018[row],format_row)

for row in range(7):

worksheet.write(row + 1, 5, df.review2019[row],format_row)

print("success!!")

workbook.close()

持續更新

初學python爬蟲

上 之前先說下這個簡易爬蟲框架的思路 排程器 爬蟲的入口 知道沒有url或爬蟲終端,輸出結果 上 1,排程器 from myspider import urls manager,html html paser,html outer class legendspider object def init...

python爬蟲初學

0x01環境搭建 import os import requests from lxml import etree from urllib.parse import urljoin import urllib pip installl 包名字0x02介紹這裡寫了乙個爬 的爬蟲指令碼 如果不能解決就手...

爬蟲初學1

import urllib.request import re import chardet 開啟網頁,讀取網頁,網頁解碼 page urllib.request.urlopen 開啟網頁 htmlcode page.read 獲取網頁源 print chardet.detect htmlcode ...