Recentemente, há poucos livros armazenados no banco de dados do projeto javaweb, então
decidi ir para a lista Douban para rastrear alguns dados
A primeira é rastrear a web para obter os dados e
armazená-los no tipo de dicionário primeiro
Colar código
def init (self, keyword):
self.keyword = keyword
self.url = “https://book.douban.com/tag/” + self.keyword
self.headers = { “User-Agent”: “Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 70.0.3538.25 Safari / 537.36 Core / 1.70.3741.400 QQBrowser / 10.5.3863.400 ” }
def get_page (self, start):
params = { “start”: start * 20, “type”: “T” }
response = requests.get(self.url, params=params,
headers=self.headers).text
return response
def get_book (self, html):
doc = pq (html)
para itens em doc ("li.subject-item") .items ():
book = items.find (“h2”). text ()
mensagem = itens. find (“div.pub”). text ()
score = items.find (“span.rating_nums”). text ()
number = items.find (“span.pl”). text () [1: -1]
rendimento { “livro”: livro, “mensagem”: mensagem, “pontuação”: pontuação, “número”: número }
Tipo de dicionário de retorno
Quando
as informações da mensagem no dict são retiradas de uma maneira confusa, mas regular
, a lista é obtida / dividindo e armazenando as strings divididas
. O subscrito pode ser passado através da travessia da lista
porque o comprimento da mensagem é curto, e o subscrito
pode ser obtido diretamente para obter o autor e o preço.
Até agora
, temos o preço de autor do título
Ainda há um pequeno problema aqui
. O preço rastreado está no formato xx yuan
e o banco de dados armazena o tipo int,
então você pode obter a string em formato digital puro pegando o primeiro item da lista de divisão ('yuan') e o resto será executado pelo cursor Ou seja, o mysql será convertido para int
A próxima ideia é salvar no banco de dados durante o rastreamento
Python é relativamente simples de conectar ao banco de dados
conn = pymysql.connect (
host = localhost ,
port = 10047,
user = 'root',
passwd = 'qaz1234567',
db = 'Store',
charset = 'utf8'
)
Depois de obter a conexão, você pode manipular a instrução sql por meio do cursor
Eu também encontrei vários problemas de inserção
Python também suporta pré-processamento mysql. A diferença de JDBC é que o
espaço reservado é% s.
Além disso, por motivos de banco de dados, há um ID que aumenta
automaticamente . JavaWeb é operado por objetos Bean.
Ao inserir o ID em python, o espaço reservado% s também é necessário. Basta preencher um 0. O
MySQL incrementará automaticamente o ID.
Além disso, o cursor precisa de detalhes para inserir dados.
Insira uma única linha de dados
def db_insert_data(self, sql, cur, *args):
try:
# print(args)
result = cur.execute(sql, args)
print('添加语句受影响的行数: ' + '信息插入数据库成功 ', result)
except Exception as e:
print('db_insert_data error: ', e.args)
args são parâmetros variáveis
Basta colocar os caracteres de espaço reservado juntos
Resolvidos esses problemas e
descobri que a saída de impressão pode ser inserida,
mas o MySQL não tem efeito. Você
deve se lembrar
de
terminar o trabalho. Você precisa enviar o cursor para a transação cur.close ()
conn.commit ()
conn.close ()
Insira os dados após o programa terminar